|
'''OpenGL extension MESAX.texture_stack |
|
|
|
This module customises the behaviour of the |
|
OpenGL.raw.GL.MESAX.texture_stack to provide a more |
|
Python-friendly API |
|
|
|
Overview (from the spec) |
|
|
|
There are a number of circumstances where an application may wish to |
|
blend two textures out of a larger set of textures. Moreover, in some |
|
cases the selected textures may vary on a per-fragment basis within |
|
a polygon. Several examples include: |
|
|
|
1. High dynamic range textures. The application stores several |
|
different "exposures" of an image as different textures. On a |
|
per-fragment basis, the application selects which exposures are |
|
used. |
|
|
|
2. A terrain engine where the altitude of a point determines the |
|
texture applied to it. If the transition is from beach sand to |
|
grass to rocks to snow, the application will store each texture |
|
in a different texture map, and dynamically select which two |
|
textures to blend at run-time. |
|
|
|
3. Storing short video clips in textures. Each depth slice is a |
|
single frame of video. |
|
|
|
Several solutions to this problem have been proposed, but they either |
|
involve using a separate texture unit for each texture map or using 3D |
|
textures without mipmaps. Both of these options have major drawbacks. |
|
|
|
This extension provides a third alternative that eliminates the major |
|
drawbacks of both previous methods. A new texture target, |
|
TEXTURE_2D_STACK, is added that functions identically to TEXTURE_3D in |
|
all aspects except the sizes of the non-base level images. In |
|
traditional 3D texturing, the size of the N+1 LOD is half the size |
|
of the N LOD in all three dimensions. For the TEXTURE_2D_STACK target, |
|
the height and width of the N+1 LOD is halved, but the depth is the |
|
same for all levels of detail. The texture then becomes a "stack" of |
|
2D textures. The per-fragment texel is selected by the R texture |
|
coordinate. |
|
|
|
References: |
|
|
|
http://www.opengl.org/discussion_boards/cgi_directory/ultimatebb.cgi?ubb=get_topic;f=3;t=011557 |
|
http://www.opengl.org/discussion_boards/cgi_directory/ultimatebb.cgi?ubb=get_topic;f=3;t=000516 |
|
http://www.opengl.org/discussion_boards/cgi_directory/ultimatebb.cgi?ubb=get_topic;f=3;t=011903 |
|
http://www.delphi3d.net/articles/viewarticle.php?article=terraintex.htm |
|
|
|
The official definition of this extension is available here: |
|
http://www.opengl.org/registry/specs/MESAX/texture_stack.txt |
|
''' |
|
from OpenGL import platform, constant, arrays |
|
from OpenGL import extensions, wrapper |
|
import ctypes |
|
from OpenGL.raw.GL import _types, _glgets |
|
from OpenGL.raw.GL.MESAX.texture_stack import * |
|
from OpenGL.raw.GL.MESAX.texture_stack import _EXTENSION_NAME |
|
|
|
def glInitTextureStackMESAX(): |
|
'''Return boolean indicating whether this extension is available''' |
|
from OpenGL import extensions |
|
return extensions.hasGLExtension( _EXTENSION_NAME ) |
|
|
|
|
|
|