GL_HP_occlusion_test - PRELIMINARY ---------------------------------- XXX - Not complete yet!!! Name HP_occlusion_test Name Strings GL_HP_occlusion_test Number 137 Overview This extension defines a mechanism whereby an application can determine the non-visibility of some set of geometry based on whether an encompassing set of geometry is non-visible. In general this feature does not guarantee that the target geometry is visible when the test fails, but is accurate with regard to non-visibility. Occlusion culling allows an application to render some geometry and at the completion of the rendering to determine if any of the geometry could or did modify the depth buffer, ie. a depth buffer test succeeded. The idea being that if the application renders a bounding box of some geometry in this mode and the occlusion test failed (ie. the bounding box was depth culled due to the current contents of the depth buffer) then the geometry enclosed by the bounding box would also be depth culled. Occlusion culling operates independently of the current rendering state (ie. when occlusion culling is enabled fragments are generated and the depth and/or color buffer may be updated). To prevent updating the depth/color buffers the application must disable updates to these buffers. As a side effect of reading the occlusion result the internal result state is cleared, setting it up for a new bounding box test. The expected usage of this feature is : - disable updates to color and depth buffer (optional) glDepthMask(GL_FALSE) glColorMask(GL_FALSE,GL_FALSE,GL_FALSE,GL_FALSE) - enable occlusion test glEnable(GL_OCCLUSION_TEST_HP) - render bounding geometry gl rendering calls - disable occlusion test glDisable(GL_OCCLUSION_TEST_HP) - enable updates to color and depth buffer glDepthMask(GL_TRUE) glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_TRUE) - read occlusion test result glGetBooleanv(GL_OCCLUSION_TEST_RESULT_HP, &result) - if (result) render internal geometry else don't render For this extension to be useful the assumption are being made : - the time to render the geometry under test is much more than rendering the encompassing geometry, including reading back the test result - the application is modelling data that includes occluding structures (eg. walls, hierarchial assemblies, ...) - the application is structured in such a way as to utilize bounding boxes for encompassing geometry New Procedures and Functions none New Tokens Accepted by the parameter of Enable, Disable, and IsEnabled, by the of GetBooleanv, GetIntegerv, GetFloatv, and GetDoublev : OCCLUSION_TEST_HP 0x???? Accepted by the of GetBooleanv, GetIntegerv, GetFloatv, and GetDoublev : OCCLUSION_TEST_RESULT_HP 0x???? New State Boolean result of occlusion test, initial value of FALSE. The result is set to FALSE as a side effect of reading it (executing a Get call). Issue - should the interface allow for multiple occlusion tests to be enabled possible extension : add MAX_OCCLUSION_TESTS add OCCLUSION_TESTn_HP where n is 1 to MAX_OCCLUSION_TESTS add OCCLUSION_TEST_RESULTn_HP where n is 1 to MAX_OCCLUSION_TESTS define semantics of multiple tests enables (ex. there exists precedence of tests, ie. TEST7 overrides TEST1 thru 6) define how mulitple test results returned (ex. bit encoded in return word, 32 per word) define disable(OCCLUSION_TEST_HP) (un-numbered test) to disable all currently enabled resulting usage : disable update to color and depth buffer enable occlusion test 1 render bounding box 1 enable occlusion test 2 render bounding box 2 ... enable occlusion test n render bounding box n disable all occlusion tests enable updates to color and depth buffer read occlusion test results for each result if (result) render internal geometry else don't render - should the interface be based on render mode semantics no proposal at this time --------------64E073B876D--