From cf4e2ea7ecf54cb566415a374f98cbd512dd1419 Mon Sep 17 00:00:00 2001 From: Andrea Baldacci baldacci Date: Tue, 24 May 2011 09:23:31 +0000 Subject: [PATCH] Another try to run on Mac: added glDrawBuffer call before drawing to result texture. --- src/fgt/filter_sdfgpu/filter_sdfgpu.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/fgt/filter_sdfgpu/filter_sdfgpu.cpp b/src/fgt/filter_sdfgpu/filter_sdfgpu.cpp index 582e71aa5..ef1e79745 100644 --- a/src/fgt/filter_sdfgpu/filter_sdfgpu.cpp +++ b/src/fgt/filter_sdfgpu/filter_sdfgpu.cpp @@ -286,10 +286,7 @@ bool SdfGpuPlugin::initGL(MeshModel& mm) mFboResult->attachTexture( mResultTexture->format().target(), mResultTexture->id(), GL_COLOR_ATTACHMENT0_EXT ); assert(mFboResult->isValid()); checkGLError::qDebug("Error during mFboResult "); - //clear first time - mFboResult->bind(); - glClear(GL_COLOR_BUFFER_BIT); - mFboResult->unbind(); + //We use 3 FBOs to avoid z-fighting in sdf and obscurance calculation, see TraceRays function for details for(int i = 0; i < 3; i++) @@ -545,6 +542,8 @@ void SdfGpuPlugin::calculateSdfHW(FramebufferObject* fboFront, FramebufferObject { mFboResult->bind(); glViewport(0, 0, mResTextureDim, mResTextureDim); + glDrawBuffer(GL_COLOR_ATTACHMENT0); + GLfloat mv_pr_Matrix_f[16]; // modelview-projection matrix glGetFloatv(GL_MODELVIEW_MATRIX, mv_pr_Matrix_f); @@ -639,6 +638,9 @@ void SdfGpuPlugin::calculateSdfHW(FramebufferObject* fboFront, FramebufferObject glVertex3f(-1.0f, 1.0f, 0.0f); //U-L glEnd(); + + assert(glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT) == GL_FRAMEBUFFER_COMPLETE_EXT && "mFboResult error while drawing"); + mFboResult->unbind(); glDepthMask(GL_TRUE); glEnable(GL_DEPTH_TEST); @@ -672,6 +674,7 @@ void SdfGpuPlugin::calculateObscurance(FramebufferObject* fboFront, FramebufferO { mFboResult->bind(); glViewport(0, 0, mResTextureDim, mResTextureDim); + glDrawBuffer(GL_COLOR_ATTACHMENT0); GLfloat mv_pr_Matrix_f[16]; // modelview-projection matrix glGetFloatv(GL_MODELVIEW_MATRIX, mv_pr_Matrix_f); @@ -749,6 +752,8 @@ void SdfGpuPlugin::calculateObscurance(FramebufferObject* fboFront, FramebufferO glVertex3f(-1.0f, 1.0f, 0.0f); //U-L glEnd(); + assert(glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT) == GL_FRAMEBUFFER_COMPLETE_EXT && "mFboResult error while drawing"); + mFboResult->unbind(); glDepthMask(GL_TRUE); glEnable(GL_DEPTH_TEST);