'''OpenGL extension ARB.clip_control This module customises the behaviour of the OpenGL.raw.GL.ARB.clip_control to provide a more Python-friendly API Overview (from the spec) This extension provides additional clip control modes to configure how clip space is mapped to window space. This extension's goal is to 1) allow OpenGL to effectively match Direct3D's coordinate system conventions, and 2) potentially improve the numerical precision of the Z coordinate mapping. Developers interested in this functionality may be porting content from Direct3D to OpenGL and/or interested in improving the numerical accuracy of depth testing, particularly with floating-point depth buffers. OpenGL's initial and conventional clip control state is configured by: glClipControl(GL_LOWER_LEFT, GL_NEGATIVE_ONE_TO_ONE); where geometry with (x,y) normalized device coordinates of (-1,-1) correspond to the lower-left corner of the viewport and the near and far planes correspond to z normalized device coordinates of -1 and +1, respectively. This extension can be used to render content used in a Direct3D application in OpenGL in a straightforward way without modifying vertex or matrix data. When rendering into a window, the command glClipControl(GL_LOWER_LEFT, GL_ZERO_TO_ONE); configures the near clip plane to correspond to a z normalized device coordinate of 0 as in Direct3D. Geometry with (x,y) normalized device coordinates of (-1,-1) correspond to the lower-left corner of the viewport in Direct3D, so no change relative to OpenGL conventions is needed there. Other state related to screen-space coordinates may need to be modified for the application to map from Direct3D to OpenGL window coordinate conventions. For example, the viewport rectangle in Direct3D needs to be inverted within the window to work properly in OpenGL windowed rendering: glViewport(d3d_viewport_x, window_height - (d3d_viewport_y + d3d_viewport_height), d3d_viewport_width, d3d_viewport_height); When rendering Direct3D content into a framebuffer object in OpenGL, there is one complication -- how to get a correct image *out* of the related textures. Direct3D applications would expect a texture coordinate of (0,0) to correspond to the upper-left corner of a rendered image, while OpenGL FBO conventions would map (0,0) to the lower-left corner of the rendered image. For applications wishing to use Direct3D content with unmodified texture coordinates, the command glClipControl(GL_UPPER_LEFT, GL_ZERO_TO_ONE); configures the OpenGL to invert geometry vertically inside the viewport. Content at the top of the viewport for Direct3D will be rendered to the bottom of the viewport from the point of view of OpenGL, but will have a texture coordinate of zero in both cases. When operating in this mode, applications need not invert the programmed viewport rectangle as recommended for windowed rendering above. Applications happy with OpenGL's origin conventions but seeking potentially improved depth precision can configure clip controls using: glClipControl(GL_LOWER_LEFT, GL_ZERO_TO_ONE); to avoid the loss of precision from the DepthRange transformation (which by default is z_window = z_ndc * 0.5 + 0.5). The official definition of this extension is available here: http://www.opengl.org/registry/specs/ARB/clip_control.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.ARB.clip_control import * from OpenGL.raw.GL.ARB.clip_control import _EXTENSION_NAME def glInitClipControlARB(): '''Return boolean indicating whether this extension is available''' from OpenGL import extensions return extensions.hasGLExtension( _EXTENSION_NAME ) ### END AUTOGENERATED SECTION