| '''OpenGL extension AMD.interleaved_elements |
| |
| This module customises the behaviour of the |
| OpenGL.raw.GL.AMD.interleaved_elements to provide a more |
| Python-friendly API |
| |
| Overview (from the spec) |
| |
| The glDrawElements function and its variants (instanced and indirect, |
| for example) allow OpenGL to draw indexed arrays of vertices. Since its |
| inception, OpenGL has supported unsigned bytes, unsigned shorts and |
| unsigned integers as index types. However, all enabled vertex arrays may |
| be represented by at most one shared index. |
| |
| A common scenario in graphics rendering is that several faces share |
| a vertex where, for each face some properties of a vertex (position and |
| texture coordinates, for example) should be common but others must be |
| unique (colors, normals, and so on). Consider a mesh of a cube with |
| per-face normals, for example. There are 8 vertices and 6 normals, and 12 |
| triangles (where each face of the cube is represented as two triangles). |
| To render this cube, we must compute the 24 unique permutations of |
| position and normal and build a new element list to index into it. In |
| fact, any advantage of indexed draw is lost here as the number of required |
| permutations is equal to the final vertex count required to draw the |
| object. |
| |
| This extension allows OpenGL to process multi-component packed element |
| data. The maximum size of a vertex's index data is not increased, but the |
| facility to store 2 16-bit or 2 or 4 8-bit indices per vertex is introduced. |
| Each vertex attribute is given a swizzle property to allow its index to |
| be sourced from one of up to 4 channels of index data. This effectively |
| allows an application to supply multiple interleaved streams of index data |
| to OpenGL. Each vertex attribute is given a 'channel selector' to select |
| one of the up to 4 channels of vertex index information presented to |
| OpenGL. This enables the use-case described above and many more. |
| The swizzle parameter is also applied to vertex indices passed to shaders, |
| and updates to the definition of base vertex parameters and primitive |
| restart are applied. |
| |
| The official definition of this extension is available here: |
| http://www.opengl.org/registry/specs/AMD/interleaved_elements.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.AMD.interleaved_elements import * |
| from OpenGL.raw.GL.AMD.interleaved_elements import _EXTENSION_NAME |
|
|
| def glInitInterleavedElementsAMD(): |
| '''Return boolean indicating whether this extension is available''' |
| from OpenGL import extensions |
| return extensions.hasGLExtension( _EXTENSION_NAME ) |
|
|
|
|
| |