|
'''OpenGL extension ARB.draw_instanced |
|
|
|
This module customises the behaviour of the |
|
OpenGL.raw.GL.ARB.draw_instanced to provide a more |
|
Python-friendly API |
|
|
|
Overview (from the spec) |
|
|
|
A common use case in GL for some applications is to be able to |
|
draw the same object, or groups of similar objects that share |
|
vertex data, primitive count and type, multiple times. This |
|
extension provides a means of accelerating such use cases while |
|
restricting the number of API calls, and keeping the amount of |
|
duplicate data to a minimum. |
|
|
|
This extension introduces two draw calls which are conceptually |
|
equivalent to a series of draw calls. Each conceptual call in |
|
this series is considered an "instance" of the actual draw call. |
|
|
|
This extension also introduces a read-only built-in variable to |
|
GLSL which contains the "instance ID." This variable initially |
|
contains 0, but increases by one after each conceptual draw call. |
|
|
|
By using the instance ID or multiples thereof as an index into |
|
a uniform array containing transform data, vertex shaders can |
|
draw multiple instances of an object with a single draw call. |
|
|
|
The official definition of this extension is available here: |
|
http://www.opengl.org/registry/specs/ARB/draw_instanced.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.draw_instanced import * |
|
from OpenGL.raw.GL.ARB.draw_instanced import _EXTENSION_NAME |
|
|
|
def glInitDrawInstancedARB(): |
|
'''Return boolean indicating whether this extension is available''' |
|
from OpenGL import extensions |
|
return extensions.hasGLExtension( _EXTENSION_NAME ) |
|
|
|
|
|
glDrawElementsInstancedARB=wrapper.wrapper(glDrawElementsInstancedARB).setInputArraySize( |
|
'indices', None |
|
) |
|
|