Class ARBTextureBufferObject
- java.lang.Object
-
- org.lwjgl.opengl.ARBTextureBufferObject
-
public class ARBTextureBufferObject extends java.lang.Object
Native bindings to the ARB_texture_buffer_object extension.This extension provides a new texture type, called a buffer texture. Buffer textures are one-dimensional arrays of texels whose storage comes from an attached buffer object. When a buffer object is bound to a buffer texture, a format is specified, and the data in the buffer object is treated as an array of texels of the specified format.
The use of a buffer object to provide storage allows the texture data to be specified in a number of different ways: via buffer object loads (
BufferData
), direct CPU writes (MapBuffer
), framebuffer readbacks (EXT_pixel_buffer_object extension). A buffer object can also be loaded by transform feedback (NV_transform_feedback extension), which captures selected transformed attributes of vertices processed by the GL. Several of these mechanisms do not require an extra data copy, which would be required when using conventional TexImage-like entry points.Buffer textures do not support mipmapping, texture lookups with normalized floating-point texture coordinates, and texture filtering of any sort, and may not be used in fixed-function fragment processing. They can be accessed via single texel fetch operations in programmable shaders. For assembly shaders (NV_gpu_program4), the TXF instruction is used. For GLSL (EXT_gpu_shader4), a new sampler type and texel fetch function are used.
While buffer textures can be substantially larger than equivalent one-dimensional textures; the maximum texture size supported for buffer textures in the initial implementation of this extension is 2^27 texels, versus 2^13 (8192) texels for otherwise equivalent one-dimensional textures. When a buffer object is attached to a buffer texture, a size is not specified; rather, the number of texels in the texture is taken by dividing the size of the buffer object by the size of each texel.
Requires
OpenGL 2.0
and NV_gpu_program4 or EXT_gpu_shader4. Promoted to core inOpenGL 3.1
.
-
-
Field Summary
Fields Modifier and Type Field and Description static int
GL_MAX_TEXTURE_BUFFER_SIZE_ARB
GL_TEXTURE_BINDING_BUFFER_ARBAccepted by thepname
parameters of GetBooleanv, GetDoublev, GetFloatv, and GetIntegerv.static int
GL_TEXTURE_BUFFER_ARB
Accepted by thetarget
parameter of BindBuffer, BufferData, BufferSubData, MapBuffer, MapBufferRangeARB, BindTexture, UnmapBuffer, GetBufferSubData, GetBufferParameteriv, GetBufferPointerv, and TexBufferARB, and thepname
parameter of GetBooleanv, GetDoublev, GetFloatv, and GetIntegerv.static int
GL_TEXTURE_BUFFER_DATA_STORE_BINDING_ARB
GL_TEXTURE_BUFFER_FORMAT_ARBAccepted by thepname
parameters of GetBooleanv, GetDoublev, GetFloatv, and GetIntegerv.
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method and Description static void
glTexBufferARB(int target, int internalformat, int buffer)
Attaches the storage for the buffer object namedbuffer
to the active buffer texture, and specifies an internal format for the texel array found in the attached buffer object.
-
-
-
Field Detail
-
GL_TEXTURE_BUFFER_ARB
Accepted by thetarget
parameter of BindBuffer, BufferData, BufferSubData, MapBuffer, MapBufferRangeARB, BindTexture, UnmapBuffer, GetBufferSubData, GetBufferParameteriv, GetBufferPointerv, and TexBufferARB, and thepname
parameter of GetBooleanv, GetDoublev, GetFloatv, and GetIntegerv.
-
GL_MAX_TEXTURE_BUFFER_SIZE_ARB, GL_TEXTURE_BINDING_BUFFER_ARB, GL_TEXTURE_BUFFER_DATA_STORE_BINDING_ARB, GL_TEXTURE_BUFFER_FORMAT_ARB
Accepted by thepname
parameters of GetBooleanv, GetDoublev, GetFloatv, and GetIntegerv.
-
-
Method Detail
-
glTexBufferARB
public static void glTexBufferARB(int target, int internalformat, int buffer)
Attaches the storage for the buffer object namedbuffer
to the active buffer texture, and specifies an internal format for the texel array found in the attached buffer object. Ifbuffer
is zero, any buffer object attached to the buffer texture is detached, and no new buffer object is attached. Ifbuffer
is non-zero, but is not the name of an existing buffer object, the errorINVALID_OPERATION
is generated.When a buffer object is attached to a buffer texture, the buffer object's data store is taken as the texture's texel array. The number of texels in the buffer texture's texel array is given by
floor(buffer_size / (components * sizeof(base_type))
,where
buffer_size
is the size of the buffer object, in basic machine units andcomponents
andbase_type
are the element count and base data type for elements. The number of texels in the texel array is then clamped to the implementation-dependent limitMAX_TEXTURE_BUFFER_SIZE_ARB
. When a buffer texture is accessed in a shader, the results of a texel fetch are undefined if the specified texel number is greater than or equal to the clamped number of texels in the texel array.When a buffer texture is accessed in a shader, an integer is provided to indicate the texel number being accessed. If no buffer object is bound to the buffer texture, the results of the texel access are undefined. Otherwise, the attached buffer object's data store is interpreted as an array of elements of the GL data type corresponding to
internalformat
. Each texel consists of one to four elements that are mapped to texture components (R, G, B, A, L, and I). Elementm
of the texel numberedn
is taken from elementn
*components
+m
of the attached buffer object's data store. Elements and texels are both numbered starting with zero. For texture formats with normalized components, the extracted values are converted to floating-point values. The components of the texture are then converted to an (R,G,B,A) vector, and returned to the shader as a four-component result vector with components of the appropriate data type for the texture's internal format.- Parameters:
target
- the target of the operation. Must be:TEXTURE_BUFFER_ARB
internalformat
- the sized internal format of the data in the store belonging tobuffer
buffer
- the name of the buffer object whose storage to attach to the active buffer texture
-
-