OpenGL extension ARB.fragment_coord_conventions
This module customises the behaviour of the OpenGL.raw.GL.ARB.fragment_coord_conventions to provide a more Python-friendly API
Overview (from the spec)
This extension provides alternative conventions for the fragment coordinate XY location available for programmable fragment processing.
The scope of this extension deals *only* with how the fragment coordinate XY location appears during programming fragment processing. Beyond the scope of this extension are coordinate conventions used for rasterization or transformation.
In the case of the coordinate conventions for rasterization and transformation, some combination of the viewport, depth range, culling state, and projection matrix state can be reconfigured to adopt other arbitrary clip-space and window-space coordinate space conventions. Adopting other clip-space and window-space conventions involves adjusting existing OpenGL state. However it is non-trivial to massage an arbitrary fragment shader or program to adopt a different window-space coordinate system because such shaders are encoded in various textual representations.
The dominant 2D and 3D rendering APIs make two basic choices of convention when locating fragments in window space.
The two choices are:
1) Is the origin nearest the lower-left- or upper-left-most pixel of the window?
2) Is the (x,y) location of the pixel nearest the origin at (0,0) or (0.5,0.5)?
OpenGL assumes a lower-left origin for window coordinates and assumes pixel centers are located at half-pixel coordinates. This means the XY location (0.5,0.5) corresponds to the lower-left-most pixel in a window.
Other window coordinate conventions exist for other rendering APIs. X11, GDI, and Direct3D version through DirectX 9 assume an upper-left window origin and locate pixel centers at integer XY values. By this alternative convention, the XY location (0,0) corresponds to the upper-left-most pixel in a window.
Direct3D for DirectX 10 assumes an upper-left origin (as do prior DirectX versions) yet assumes half-pixel coordinates (unlike prior DirectX versions). By the DirectX 10 convention, the XY location (0.5,0.5) corresponds to the upper-left-most pixel in a window.
Fragment shaders can directly access the location of a given processed fragment in window space. We call this location the "fragment coordinate".
This extension provides a means for fragment shaders written in GLSL or OpenGL assembly extensions to specify alternative conventions for determining the fragment coordinate value accessed during programmable fragment processing.
The motivation for this extension is to provide an easy, efficient means for fragment shaders accessing a fragment's window-space location to adopt the fragment coordinate convention for which the shader was originally written.
The official definition of this extension is available here: