occlusion_query.py :  » Game-2D-3D » PyOpenGL » PyOpenGL-3.0.1 » OpenGL » GL » ARB » Python Open Source

Home
Python Open Source
1.3.1.2 Python
2.Ajax
3.Aspect Oriented
4.Blog
5.Build
6.Business Application
7.Chart Report
8.Content Management Systems
9.Cryptographic
10.Database
11.Development
12.Editor
13.Email
14.ERP
15.Game 2D 3D
16.GIS
17.GUI
18.IDE
19.Installer
20.IRC
21.Issue Tracker
22.Language Interface
23.Log
24.Math
25.Media Sound Audio
26.Mobile
27.Network
28.Parser
29.PDF
30.Project Management
31.RSS
32.Search
33.Security
34.Template Engines
35.Test
36.UML
37.USB Serial
38.Web Frameworks
39.Web Server
40.Web Services
41.Web Unit
42.Wiki
43.Windows
44.XML
Python Open Source » Game 2D 3D » PyOpenGL 
PyOpenGL » PyOpenGL 3.0.1 » OpenGL » GL » ARB » occlusion_query.py
'''OpenGL extension ARB.occlusion_query

This module customises the behaviour of the 
OpenGL.raw.GL.ARB.occlusion_query to provide a more 
Python-friendly API

Overview (from thespec import 
  
  This extension defines a mechanism whereby an application can query
  the number of pixels (or, more precisely, samples) drawn by a
  primitive or group of primitives.
  
  The primary purpose of such a query (hereafter referred to as an
  "occlusion query") is to determine the visibility of an object.
  Typically, the application will render the major occluders in the
  scene, then perform an occlusion query for the bounding box of each
  detail object in the scene.  Only if said bounding box is visible,
  i.e., if at least one sample is drawn, should the corresponding object
  be drawn.
  
  The earlier HP_occlusion_test extension defined a similar mechanism,
  but it had two major shortcomings.
  
  - It returned the result as a simple GL_TRUE/GL_FALSE result, when in
    fact it is often useful to know exactly how many samples were
    drawn.
  - It provided only a simple "stop-and-wait" model for using multiple
    queries.  The application begins an occlusion test and ends it;
    then, at some later point, it asks for the result, at which point
    the driver must stop and wait until the result from theprevious import 
    test is back before the application can even begin the next one.
    This is a very simple model, but its performance is mediocre when
    an application wishes to perform many queries, and it eliminates
    most of the opportunities for parallelism between the CPU and GPU.
  
  This extension solves both of those problems.  It returns as its
  result the number of samples that pass the depth and stencil tests,
  and it encapsulates occlusion queries in "query objects" that allow
  applications to issue many queries before asking for the result of
  any one.  As a result, they can overlap the time it takes for the
  occlusion query results to be returned with other, more useful work,
  such as rendering other parts of the scene or performing other
  computations on the CPU.
  
  There are many situations where a pixel/sample count, rather than a
  boolean result, is useful.
  
  - Objects that are visible but cover only a very small number of
    pixels can be skipped at a minimal reduction of image quality.
  - Knowing exactly how many pixels an object might cover may help the
    application decide which level-of-detail model should be used.  If
    only a few pixels are visible, a low-detail model may be
    acceptable.
  - "Depth peeling" techniques, such as order-independent transparency,
    need to know when to stop rendering more layers; it is difficult to
    determine a priori how many layers are needed.  A boolean result
    allows applications to stop when more layers will not affect the
    image at all, but this will likely result in unacceptable
    performance.  Instead, it makes more sense to stop rendering when
    the number of pixels in each layer falls below a given threshold.
  - Occlusion queries can replace glReadPixels of the depth buffer to
    determine whether (for example) a light source is visible for the
    purposes of a lens flare effect or a halo to simulate glare.  Pixel
    counts allow you to compute the percentage of the light source that
    is visible, and the brightness of these effects can be modulated
    accordingly.

The official definition of this extension is available here:
http://www.opengl.org/registry/specs/ARB/occlusion_query.txt
'''
from OpenGL import platform,constants,constant,arrays
from OpenGL import extensions,wrapper
from OpenGL.GL import glget
import ctypes
from OpenGL.raw.GL.ARB.occlusion_query import *
### END AUTOGENERATED SECTION
from OpenGL.lazywrapper import lazy
from OpenGL.GL import glget
from OpenGL import converters
@lazy( glDeleteQueriesARB )
def glDeleteQueriesARB( baseOperation, n, ids=None ):
    if ids is None:
        ids = arrays.GLuintArray.asArray( ids )
        n = arrays.GLuintArray.arraySize( ids )
    else:
        ids = arrays.GLuintArray.asArray( ids )
    return baseOperation( n,ids )
@lazy( glGenQueriesARB )
def glGenQueriesARB( baseOperation, n, ids=None ):
    """Generate n queries, if ids is None, is allocated
    
    returns array of ids
    """
    if ids is None:
        ids = arrays.GLuintArray.zeros( (n,))
    else:
        ids = arrays.GLuintArray.asArray( ids )
    baseOperation( n, ids )
    return ids

for func in (
    'glGetQueryivARB','glGetQueryObjectivARB','glGetQueryObjectuivARB',
):
    globals()[func] = wrapper.wrapper(globals()[func]).setOutput(
        "params", (1,)
    )
del func, glget
www.java2java.com | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.