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 <cap> parameter of Enable, Disable, and IsEnabled, by
    the <pname> of GetBooleanv, GetIntegerv, GetFloatv, and GetDoublev :

        OCCLUSION_TEST_HP           0x????

    Accepted by the <pname> 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--
