From def0bae4d83103d1d9f3e6b20d9561d1760bc17c Mon Sep 17 00:00:00 2001 From: Kearwood Gilbert Date: Thu, 11 Apr 2013 14:04:56 -0700 Subject: [PATCH] fixed bug in real-time occlusion culling that caused octree nodes and flares to disappear when they should be visible --- KREngine/kraken/KRCamera.cpp | 2 +- KREngine/kraken/KRLight.cpp | 4 ++++ KREngine/kraken/KRScene.cpp | 5 +++++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/KREngine/kraken/KRCamera.cpp b/KREngine/kraken/KRCamera.cpp index d3c0272..031a394 100644 --- a/KREngine/kraken/KRCamera.cpp +++ b/KREngine/kraken/KRCamera.cpp @@ -228,7 +228,7 @@ void KRCamera::renderFrame(float deltaTime, GLint renderBufferWidth, GLint rende // Render the geometry - scene.render(this, m_viewport.getVisibleBounds(), m_viewport, KRNode::RENDER_PASS_FORWARD_OPAQUE, false); + scene.render(this, m_viewport.getVisibleBounds(), m_viewport, KRNode::RENDER_PASS_FORWARD_OPAQUE, true); } // ----====---- Sky Box ----====---- diff --git a/KREngine/kraken/KRLight.cpp b/KREngine/kraken/KRLight.cpp index 6f5faa7..a09c9f6 100644 --- a/KREngine/kraken/KRLight.cpp +++ b/KREngine/kraken/KRLight.cpp @@ -286,6 +286,10 @@ void KRLight::render(KRCamera *pCamera, std::vector &lights, const KR if(m_flareTexture.size() && m_flareSize > 0.0f) { if(m_occlusionQuery) { + GLuint hasBeenTested = 0; + while(!hasBeenTested) { + GLDEBUG(glGetQueryObjectuivEXT(m_occlusionQuery, GL_QUERY_RESULT_AVAILABLE_EXT, &hasBeenTested)); // FINDME, HACK!! This needs to be replaced with asynchonous logic + } GLuint params = 0; GLDEBUG(glGetQueryObjectuivEXT(m_occlusionQuery, GL_QUERY_RESULT_EXT, ¶ms)); GLDEBUG(glDeleteQueriesEXT(1, &m_occlusionQuery)); diff --git a/KREngine/kraken/KRScene.cpp b/KREngine/kraken/KRScene.cpp index 9dfea53..f076bed 100644 --- a/KREngine/kraken/KRScene.cpp +++ b/KREngine/kraken/KRScene.cpp @@ -165,6 +165,11 @@ void KRScene::render(KROctreeNode *pOctreeNode, std::map &visibleBo if(bOcclusionResultsPass) { // ----====---- Occlusion results pass ----====---- if(pOctreeNode->m_occlusionTested) { + GLuint hasBeenTested = 0; + while(!hasBeenTested) { + GLDEBUG(glGetQueryObjectuivEXT(pOctreeNode->m_occlusionQuery, GL_QUERY_RESULT_AVAILABLE_EXT, &hasBeenTested)); // FINDME, HACK!! This needs to be replaced with asynchonous logic + } + GLuint params = 0; GLDEBUG(glGetQueryObjectuivEXT(pOctreeNode->m_occlusionQuery, GL_QUERY_RESULT_EXT, ¶ms));