Changeset 115 for trunk/VUT/work/ogre_changes/RenderSystems/GL/src
- Timestamp:
- 05/30/05 03:20:23 (20 years ago)
- Location:
- trunk/VUT/work/ogre_changes/RenderSystems/GL/src
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/VUT/work/ogre_changes/RenderSystems/GL/src/OgreGLHardwareOcclusionQuery.cpp
r99 r115 27 27 #include "OgreException.h" 28 28 29 29 30 namespace Ogre { 30 31 int GLHardwareOcclusionQuery::m_Skip = 0;32 31 33 32 /** … … 36 35 * 37 36 * @author Lee Sandberg email: lee@abcmedia.se 37 * 38 * Updated on 12/7/2004 by Chris McGuirk 39 * - Implemented ARB_occlusion_query 38 40 */ 39 41 40 /* Functions used;41 42 glGenOcclusionQueriesNV_ptr( 1, m_uintQuery );43 glDeleteOcclusionQueriesNV_ptr( 1, &m_uintQuery[0] );44 glBeginOcclusionQueryNV_ptr( m_uintQuery[0] );45 glEndOcclusionQueryNV_ptr();46 glGetOcclusionQueryuivNV_ptr( m_uintQuery[0], GL_PIXEL_COUNT_NV, NumOfFragments );47 48 TO DO: change this to the new ARB functions...49 50 */51 52 #ifndef GTP_VISIBILITY_MODIFIED_OGRE53 42 /** 54 43 * Default object constructor … … 57 46 GLHardwareOcclusionQuery::GLHardwareOcclusionQuery() 58 47 { 59 m_uintPixelCount = 0; 60 m_SkipCounter = 0; 48 mPixelCount = 0; 49 mSkipCounter = 0; 50 mSkipInterval = 0; 61 51 62 52 // Check for hardware occlusion support 63 if( glDeleteOcclusionQueriesNV_ptr != 0 ) // This is a hack to see if hw occlusion is supported. pointer is 0 if it's not supported. 53 // This is a hack to see if hw occlusion is supported. pointer is 0 if it's not supported. 54 //if (glGenQueriesARB_ptr != 0) 55 if (glGenOcclusionQueriesNV_ptr != 0) 64 56 { 65 m _bHWOcclusionSupport = true;57 mHasOcclusionSupport = true; 66 58 } 67 59 else 68 60 { 69 m _bHWOcclusionSupport = false;61 mHasOcclusionSupport = false; 70 62 } 71 63 72 if( m_bHWOcclusionSupport)64 if(mHasOcclusionSupport) 73 65 { 74 glGenOcclusionQueriesNV_ptr( 1, m_uintQuery ); 66 //glGenQueriesARB_ptr(1, &mQueryID ); 67 glGenOcclusionQueriesNV_ptr(1, &mQueryID); 75 68 } 76 69 } 77 78 70 79 71 /** … … 82 74 GLHardwareOcclusionQuery::~GLHardwareOcclusionQuery() 83 75 { 84 if( m _bHWOcclusionSupport )76 if( mHasOcclusionSupport ) 85 77 { 86 glDeleteOcclusionQueriesNV_ptr( 1, &m_uintQuery[0] ); 78 //glDeleteQueriesARB_ptr(1, &mQueryID); 79 glDeleteOcclusionQueriesNV_ptr(1, &mQueryID); 87 80 } 88 81 } … … 93 86 void GLHardwareOcclusionQuery::beginOcclusionQuery() 94 87 { 95 if( m_bHWOcclusionSupport ) // Make it fail silently if hardware occlusion isn't supported 88 // Make it fail silently if hardware occlusion isn't supported 89 if(mHasOcclusionSupport) 96 90 { 97 if ( m_SkipCounter == m_Skip ) { m_SkipCounter = 0; }; // Counter starts at 0 again at m_Skip 98 if ( m_SkipCounter == 0 && m_uintPixelCount != 0 ) // New or none visable objects must allways be tested but visable objects can be skiped 91 // Counter starts at 0 again at mSkipInterval 92 #ifndef GTP_VISIBILITY_MODIFIED_OGRE 93 if(mSkipCounter == mSkipInterval) 94 #else 95 if (mSkipCounter >= mSkipInterval) // otherwise no query ever issued if mSkipInterval = 0 ! 96 #endif // GTP_VISIBILITY_MODIFIED_OGRE 97 { 98 mSkipCounter = 0; 99 } 100 101 if (mSkipCounter == 0) 99 102 { 100 glBeginOcclusionQueryNV_ptr( m_uintQuery[0] ); 103 //glBeginQueryARB_ptr(GL_SAMPLES_PASSED_ARB, mQueryID); 104 glBeginOcclusionQueryNV_ptr(mQueryID); 101 105 } 102 106 } … … 105 109 void GLHardwareOcclusionQuery::endOcclusionQuery() 106 110 { 107 if( m_bHWOcclusionSupport ) // Make it fail silently if hardware occlusion isn't supported 111 // Make it fail silently if hardware occlusion isn't supported 112 if(mHasOcclusionSupport) 108 113 { 109 if( m _SkipCounter == 0 && m_uintPixelCount != 0 ) // New or none visable objects must allways be tested but visable objects can be skiped114 if( mSkipCounter == 0) 110 115 { 116 //glEndQueryARB_ptr(GL_SAMPLES_PASSED_ARB); 111 117 glEndOcclusionQueryNV_ptr(); 112 118 } 113 m_SkipCounter++;114 }115 }116 119 117 bool GLHardwareOcclusionQuery::pullOcclusionQuery( unsigned int * NumOfFragments) 118 { 119 if( m_bHWOcclusionSupport ) // Make it fail silently if hardware occlusion isn't supported 120 { 121 glGetOcclusionQueryuivNV_ptr( m_uintQuery[0], GL_PIXEL_COUNT_NV, NumOfFragments ); 120 mSkipCounter++; 122 121 } 123 else124 {125 *NumOfFragments = 100000; // Fails quitlly -> every object tested is visable.126 }127 128 m_uintPixelCount = *NumOfFragments;129 130 return true;131 122 } 132 123 133 124 //------------------------------------------------------------------ 134 // OpenGL dosn't use the flag, but to fulfil the abstract interface we need to include this function. 135 // Using this function in OpenGL mode simple works the same way as calling the other function without the flag parameter, 136 // but in DX9 it works differentlly, see notes in the DX9 implementation. 137 //-- 125 // OpenGL dosn't use the flag paramter. 126 //------------------------------------------------------------------ 138 127 bool GLHardwareOcclusionQuery::pullOcclusionQuery( unsigned int* NumOfFragments, const HW_OCCLUSIONQUERY flag ) 139 128 { 140 if( m _bHWOcclusionSupport ) // Make it fail silently if hardware occlusion isn't supported129 if( mHasOcclusionSupport ) // Make it fail silently if hardware occlusion isn't supported 141 130 { 142 glGetOcclusionQueryuivNV_ptr( m_uintQuery[0], GL_PIXEL_COUNT_NV, NumOfFragments ); 131 //glGetQueryObjectuivARB_ptr(mQueryID, GL_QUERY_RESULT_ARB, NumOfFragments); 132 glGetOcclusionQueryuivNV_ptr(mQueryID, GL_PIXEL_COUNT_NV, NumOfFragments); 143 133 } 144 134 else … … 147 137 } 148 138 149 m _uintPixelCount = *NumOfFragments;139 mPixelCount = *NumOfFragments; 150 140 151 141 return true; 152 142 } 153 143 154 #else // GTP_VISIBILITY_MODIFIED_OGRE 155 156 //------------------------------------------------------------------ 157 GLHardwareOcclusionQuery::GLHardwareOcclusionQuery() 158 { 159 m_uintPixelCount = 0; 160 m_SkipCounter = 0; 161 162 // Check for hardware occlusion support 163 if ( glDeleteOcclusionQueriesNV_ptr != 0 ) // This is a hack to see if hw occlusion is supported. pointer is 0 if it's not supported. 164 //if ( glDeleteQueriesARB_ptr != 0 ) 165 { 166 m_bHWOcclusionSupport = true; 167 } 168 else 169 { 170 m_bHWOcclusionSupport = false; 171 } 172 173 if ( m_bHWOcclusionSupport ) 174 { 175 glGenOcclusionQueriesNV_ptr( 1, m_uintQuery ); 176 //glGenQueriesARB_ptr(1, m_uintQuery); 177 } 178 } 179 180 181 //------------------------------------------------------------------ 182 GLHardwareOcclusionQuery::~GLHardwareOcclusionQuery() 183 { 184 if ( m_bHWOcclusionSupport ) 185 { 186 glDeleteOcclusionQueriesNV_ptr( 1, &m_uintQuery[0] ); 187 //glDeleteQueriesARB_ptr(1, &m_uintQuery[0]); 188 } 189 } 190 191 //------------------------------------------------------------------ 192 void GLHardwareOcclusionQuery::beginOcclusionQuery() 193 { 194 if ( m_bHWOcclusionSupport ) // Make it fail silently if hardware occlusion isn't supported 195 { 196 // do the actual occlusion query for this node 197 glBeginOcclusionQueryNV_ptr( m_uintQuery[0] ); 198 //glBeginQueryARB_ptr(GL_SAMPLES_PASSED_ARB, m_uintQuery[0]); 199 } 200 } 201 202 void GLHardwareOcclusionQuery::endOcclusionQuery() 203 { 204 if ( m_bHWOcclusionSupport ) // Make it fail silently if hardware occlusion isn't supported 205 { 206 glEndOcclusionQueryNV_ptr(); 207 //glEndQueryARB_ptr(GL_SAMPLES_PASSED_ARB); 208 } 209 } 210 //------------------------------------------------------------------ 211 bool GLHardwareOcclusionQuery::pullOcclusionQuery( unsigned int * NumOfFragments, const bool waitForResult) 144 #ifdef GTP_VISIBILITY_MODIFIED_OGRE 145 //------------------------------------------------------------------ 146 bool GLHardwareOcclusionQuery::pullOcclusionQuery( unsigned int * NumOfFragments, const bool waitForResult, const HW_OCCLUSIONQUERY flag) 212 147 { 213 148 unsigned int isAvailable = GL_TRUE; 214 //int isAvailable = GL_TRUE;215 149 216 if( m_bHWOcclusionSupport)150 if (mHasOcclusionSupport) 217 151 { 218 152 if (!waitForResult) 219 153 { 220 glGetOcclusionQueryuivNV_ptr( m_uintQuery[0], GL_PIXEL_COUNT_AVAILABLE_NV, &isAvailable ); 221 //glGetQueryivARB_ptr(m_uintQuery[0], GL_QUERY_RESULT_AVAILABLE_ARB, &isAvailable); 154 // use nv queries rather that arb because they are faster (no flush) 155 //glGetQueryivARB_ptr(mQueryID, GL_QUERY_RESULT_AVAILABLE_ARB, &isAvailable); 156 glGetOcclusionQueryuivNV_ptr(mQueryID, GL_PIXEL_COUNT_AVAILABLE_NV, &isAvailable); 222 157 } 223 158 224 159 if (isAvailable == GL_TRUE) 225 160 { 226 glGetOcclusionQueryuivNV_ptr( m_uintQuery[0], GL_PIXEL_COUNT_NV, NumOfFragments);227 //glGetQueryObjectuivARB_ptr( m_uintQuery[0], GL_QUERY_RESULT_ARB, NumOfFragments);161 //glGetQueryObjectuivARB_ptr(mQueryID, GL_QUERY_RESULT_ARB, NumOfFragments); 162 glGetOcclusionQueryuivNV_ptr(mQueryID, GL_PIXEL_COUNT_NV, NumOfFragments); 228 163 } 229 164 } … … 234 169 } 235 170 236 m_uintPixelCount = *NumOfFragments;171 mPixelCount = *NumOfFragments; 237 172 238 173 return isAvailable == GL_TRUE; 239 174 } 240 175 241 //------------------------------------------------------------------ 242 bool GLHardwareOcclusionQuery::pullOcclusionQuery( unsigned int* NumOfFragments, const bool waitForResult, const HW_OCCLUSIONQUERY flag ) 243 { 244 return pullOcclusionQuery(NumOfFragments, waitForResult); 176 #endif // GTP_VIBILITY_MODIFIED_OGRE 245 177 } 246 247 #endif // GTP_VISIBILITY_MODIFIED_OGRE248 249 250 }251 252 -
trunk/VUT/work/ogre_changes/RenderSystems/GL/src/OgreGLRenderSystem.cpp
r97 r115 58 58 GL_ClientActiveTextureARB_Func glClientActiveTextureARB_ptr; 59 59 GL_SecondaryColorPointerEXT_Func glSecondaryColorPointerEXT_ptr; 60 GL_SecondaryColor3fEXT_Func glSecondaryColor3fEXT_ptr; 60 61 GL_GenBuffersARB_Func glGenBuffersARB_ptr; 61 62 GL_BindBufferARB_Func glBindBufferARB_ptr; … … 97 98 GL_EndOcclusionQueryNV_Func glEndOcclusionQueryNV_ptr; 98 99 GL_GetOcclusionQueryuivNV_Func glGetOcclusionQueryuivNV_ptr; 99 100 #ifdef GTP_VISIBILITY_MODIFIED_OGRE101 100 GL_GenQueriesARB_Func glGenQueriesARB_ptr; 102 101 GL_DeleteQueriesARB_Func glDeleteQueriesARB_ptr; 103 GL_IsQueryARB_Func glIsQueryARB_ptr;104 102 GL_BeginQueryARB_Func glBeginQueryARB_ptr; 105 103 GL_EndQueryARB_Func glEndQueryARB_ptr; 104 #ifdef GTP_VISIBILITY_MODIFIED_OGRE 106 105 GL_GetQueryivARB_Func glGetQueryivARB_ptr; 107 106 GL_GetQueryObjectivARB_Func glGetQueryObjectivARB_ptr; 107 #endif // GTP_VISIBILITY_MODIFIED_OGRE 108 108 GL_GetQueryObjectuivARB_Func glGetQueryObjectuivARB_ptr; 109 #endif // GTP_VISIBILITY_MODIFIED_OGRE110 109 111 110 namespace Ogre { … … 191 190 glClientActiveTextureARB_ptr = 0; 192 191 glSecondaryColorPointerEXT_ptr = 0; 192 glSecondaryColor3fEXT_ptr = 0; 193 193 glGenBuffersARB_ptr = 0; 194 194 glBindBufferARB_ptr = 0; … … 220 220 glEndOcclusionQueryNV_ptr = 0; 221 221 glGetOcclusionQueryuivNV_ptr = 0; 222 223 #ifdef GTP_VISIBILITY_MODIFIED_OGRE224 222 glGenQueriesARB_ptr = 0; 225 223 glDeleteQueriesARB_ptr = 0; 226 glIsQueryARB_ptr = 0;227 224 glBeginQueryARB_ptr = 0; 228 225 glEndQueryARB_ptr = 0; 226 #ifdef GTP_VISIBILITY_MODIFIED_OGRE 229 227 glGetQueryivARB_ptr = 0; 230 228 glGetQueryObjectivARB_ptr = 0; 229 #endif // GTP_VISIBILITY_MODIFIED_OGRE 231 230 glGetQueryObjectuivARB_ptr = 0; 232 #endif // GTP_VISIBILITY_MODIFIED_OGRE233 231 234 232 mCurrentLights = 0; … … 543 541 glSecondaryColorPointerEXT_ptr = 544 542 (GL_SecondaryColorPointerEXT_Func)mGLSupport->getProcAddress("glSecondaryColorPointerEXT"); 543 glSecondaryColor3fEXT_ptr = 544 (GL_SecondaryColor3fEXT_Func)mGLSupport->getProcAddress("glSecondaryColor3fEXT"); 545 545 glGenBuffersARB_ptr = 546 546 (GL_GenBuffersARB_Func)mGLSupport->getProcAddress("glGenBuffersARB"); … … 622 622 glGetOcclusionQueryuivNV_ptr = 623 623 (GL_GetOcclusionQueryuivNV_Func)mGLSupport->getProcAddress("glGetOcclusionQueryuivNV"); 624 glGetQueryObjectivARB_ptr = 625 (GL_GetQueryObjectivARB_Func)mGLSupport->getProcAddress("glGetQueryObjectivARB"); 626 glGetQueryObjectuivARB_ptr = 627 (GL_GetQueryObjectuivARB_Func)mGLSupport->getProcAddress("glGetQueryObjectuivARB"); 628 #ifdef GTP_VISIBILITY_MODIFIED_OGRE 624 629 625 glGenQueriesARB_ptr = 630 626 (GL_GenQueriesARB_Func)mGLSupport->getProcAddress("glGenQueriesARB"); 631 627 glDeleteQueriesARB_ptr = 632 628 (GL_DeleteQueriesARB_Func)mGLSupport->getProcAddress("glDeleteQueriesARB"); 633 glIsQueryARB_ptr =634 (GL_IsQueryARB_Func)mGLSupport->getProcAddress("glIsQueryARB");635 629 glBeginQueryARB_ptr = 636 630 (GL_BeginQueryARB_Func)mGLSupport->getProcAddress("glBeginQueryARB"); 637 631 glEndQueryARB_ptr = 638 632 (GL_EndQueryARB_Func)mGLSupport->getProcAddress("glEndQueryARB"); 633 #ifdef GTP_VISIBILITY_MODIFIED_OGRE 639 634 glGetQueryivARB_ptr = 640 635 (GL_GetQueryivARB_Func)mGLSupport->getProcAddress("glGetQueryivARB"); 641 636 glGetQueryObjectivARB_ptr = 642 637 (GL_GetQueryObjectivARB_Func)mGLSupport->getProcAddress("glGetQueryObjectivARB"); 638 #endif // GTP_VISIBILITY_MODIFIED_OGRE 643 639 glGetQueryObjectuivARB_ptr = 644 640 (GL_GetQueryObjectuivARB_Func)mGLSupport->getProcAddress("glGetQueryObjectuivARB"); 645 #endif // GTP_VISIBILITY_MODIFIED_OGRE646 641 647 642 mCapabilities->log(LogManager::getSingleton().getDefaultLog()); … … 1857 1852 cv1[2] = bm.colourArg1.b; 1858 1853 cv1[3] = bm.colourArg1.a; 1854 mManualBlendColours[stage][0] = bm.colourArg1; 1855 1859 1856 1860 1857 cv2[0] = bm.colourArg2.r; … … 1862 1859 cv2[2] = bm.colourArg2.b; 1863 1860 cv2[3] = bm.colourArg2.a; 1861 mManualBlendColours[stage][1] = bm.colourArg2; 1864 1862 } 1865 1863 1866 1864 if (bm.blendType == LBT_ALPHA) 1867 1865 { 1868 cv1[0] = 0;1869 cv1[1] = 0;1870 cv1[2] = 0;1866 cv1[0] = mManualBlendColours[stage][0].r; 1867 cv1[1] = mManualBlendColours[stage][0].g; 1868 cv1[2] = mManualBlendColours[stage][0].b; 1871 1869 cv1[3] = bm.alphaArg1; 1872 1870 1873 cv2[0] = 0;1874 cv2[1] = 0;1875 cv2[2] = 0;1871 cv2[0] = mManualBlendColours[stage][1].r; 1872 cv2[1] = mManualBlendColours[stage][1].g; 1873 cv2[2] = mManualBlendColours[stage][1].b; 1876 1874 cv2[3] = bm.alphaArg2; 1877 1875 } … … 2249 2247 } 2250 2248 glColor4f(1,1,1,1); 2249 glSecondaryColor3fEXT_ptr(0.0f, 0.0f, 0.0f); 2251 2250 2252 2251 // UnGuard … … 2537 2536 glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL, GL_SEPARATE_SPECULAR_COLOR); 2538 2537 glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, 1); 2538 glEnable(GL_COLOR_SUM); 2539 2539 2540 // Check for FSAA 2540 2541 // Enable the extension if it was enabled by the GLSupport
Note: See TracChangeset
for help on using the changeset viewer.