From 096a83652b7a3ae88e3ac2ae0e6e731b2a4181bc Mon Sep 17 00:00:00 2001 From: Simon Date: Sat, 10 Oct 2020 11:16:49 +0100 Subject: [PATCH] Changes to make use of temporary frame buffer more obvious --- .../neo/renderer/framebuffer.cpp | 31 ++++++++++--------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/Projects/Android/jni/d3es-multithread-master/neo/renderer/framebuffer.cpp b/Projects/Android/jni/d3es-multithread-master/neo/renderer/framebuffer.cpp index c189e3d..ca65cb5 100644 --- a/Projects/Android/jni/d3es-multithread-master/neo/renderer/framebuffer.cpp +++ b/Projects/Android/jni/d3es-multithread-master/neo/renderer/framebuffer.cpp @@ -5,14 +5,16 @@ GPL3 #include "renderer/tr_local.h" #include "renderer/VertexCache.h" -static GLuint m_framebuffer[3]; -static GLuint m_depthbuffer[3]; +#define FRAMEBUFFER_POOL_SIZE + +static GLuint m_framebuffer[FRAMEBUFFER_POOL_SIZE]; +static GLuint m_depthbuffer[FRAMEBUFFER_POOL_SIZE]; static int m_framebuffer_width, m_framebuffer_height; -static GLuint m_framebuffer_texture[3]; +static GLuint m_framebuffer_texture[FRAMEBUFFER_POOL_SIZE]; static GLint drawFboId = 0; -static int calldepth = 0; +static int currentFramebufferIndex = 0; void R_InitFrameBuffer() @@ -20,7 +22,7 @@ void R_InitFrameBuffer() m_framebuffer_width = glConfig.vidWidth; m_framebuffer_height = glConfig.vidHeight; - for (int i = 0; i < 3; ++i) { + for (int i = 0; i < FRAMEBUFFER_POOL_SIZE; ++i) { // Create texture glGenTextures(1, &m_framebuffer_texture[i]); glBindTexture(GL_TEXTURE_2D, m_framebuffer_texture[i]); @@ -43,18 +45,18 @@ void R_InitFrameBuffer() void R_FrameBufferStart() { - if (calldepth == 0) { + if (currentFramebufferIndex == 0) { glGetIntegerv(GL_FRAMEBUFFER_BINDING, &drawFboId); } // Render to framebuffer - glBindFramebuffer(GL_FRAMEBUFFER, m_framebuffer[calldepth]); + glBindFramebuffer(GL_FRAMEBUFFER, m_framebuffer[currentFramebufferIndex]); glBindRenderbuffer(GL_RENDERBUFFER, 0); - glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_framebuffer_texture[calldepth], 0); + glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_framebuffer_texture[currentFramebufferIndex], 0); // Attach combined depth+stencil - glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, m_depthbuffer[calldepth]); - glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, m_depthbuffer[calldepth]); + glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, m_depthbuffer[currentFramebufferIndex]); + glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, m_depthbuffer[currentFramebufferIndex]); GLenum result = glCheckFramebufferStatus(GL_FRAMEBUFFER); if(result != GL_FRAMEBUFFER_COMPLETE) @@ -65,18 +67,19 @@ void R_FrameBufferStart() glClearColor( 0.0f, 0.0f, 0.0f, 1.0f ); qglClear( GL_COLOR_BUFFER_BIT ); - calldepth++; + //Increment index in case this gets called again + currentFramebufferIndex++; } void R_FrameBufferEnd() { - calldepth--; + currentFramebufferIndex--; - if (calldepth == 0) { + if (currentFramebufferIndex == 0) { glBindFramebuffer(GL_FRAMEBUFFER, drawFboId); } else { - glBindFramebuffer(GL_FRAMEBUFFER, m_framebuffer[calldepth-1]); + glBindFramebuffer(GL_FRAMEBUFFER, m_framebuffer[currentFramebufferIndex - 1]); } }