Package gaiasky.util.gdx.mesh
Class VertexBufferObjectWithVAO
java.lang.Object
gaiasky.util.gdx.mesh.VertexBufferObjectWithVAO
- All Implemented Interfaces:
com.badlogic.gdx.utils.Disposable,IntVertexData
A VertexData implementation that uses vertex buffer objects and vertex array objects.
(This is required for OpenGL 3.0+ core profiles. In particular, the default VAO has been
deprecated, as has the use of client memory for passing vertex attributes.) Use of VAOs should
give a slight performance benefit since you don't have to bind the attributes on every draw
anymore.
If the OpenGL ES context was lost you can call invalidate() to recreate a new OpenGL vertex buffer object.
VertexBufferObjectWithVAO objects must be disposed via the dispose() method when no longer needed
Code adapted from VertexBufferObject.
-
Constructor Summary
ConstructorsConstructorDescriptionVertexBufferObjectWithVAO(boolean isStatic, int numVertices, com.badlogic.gdx.graphics.VertexAttribute... attributes) Constructs a new interleaved VertexBufferObjectWithVAO.VertexBufferObjectWithVAO(boolean isStatic, int numVertices, com.badlogic.gdx.graphics.VertexAttributes attributes) Constructs a new interleaved VertexBufferObjectWithVAO. -
Method Summary
Modifier and TypeMethodDescriptionvoidbind(ExtShaderProgram shader) Binds this VertexBufferObject for rendering via glDrawArrays or glDrawElementsvoidbind(ExtShaderProgram shader, int[] locations) Binds this VertexData for rendering via glDrawArrays or glDrawElements.voiddispose()Disposes of all resources this VertexBufferObject uses.com.badlogic.gdx.graphics.VertexAttributesReturns the underlying FloatBuffer and marks it as dirty, causing the buffer contents to be uploaded on the next call to bind.intintvoidInvalidates the VertexBufferObject so a new OpenGL buffer handle is created.voidsetVertices(float[] vertices, int offset, int count) Sets the vertices of this VertexData, discarding the old vertex data.voidunbind(ExtShaderProgram shader) Unbinds this VertexBufferObject.voidunbind(ExtShaderProgram shader, int[] locations) Unbinds this VertexData.voidupdateVertices(int targetOffset, float[] vertices, int sourceOffset, int count) Update (a portion of) the vertices.
-
Constructor Details
-
VertexBufferObjectWithVAO
public VertexBufferObjectWithVAO(boolean isStatic, int numVertices, com.badlogic.gdx.graphics.VertexAttribute... attributes) Constructs a new interleaved VertexBufferObjectWithVAO.- Parameters:
isStatic- whether the vertex data is static.numVertices- the maximum number of verticesattributes- theVertexAttributes.
-
VertexBufferObjectWithVAO
public VertexBufferObjectWithVAO(boolean isStatic, int numVertices, com.badlogic.gdx.graphics.VertexAttributes attributes) Constructs a new interleaved VertexBufferObjectWithVAO.- Parameters:
isStatic- whether the vertex data is static.numVertices- the maximum number of verticesattributes- theVertexAttributes.
-
-
Method Details
-
getAttributes
public com.badlogic.gdx.graphics.VertexAttributes getAttributes()- Specified by:
getAttributesin interfaceIntVertexData- Returns:
- the
VertexAttributesas specified during construction.
-
getNumVertices
public int getNumVertices()- Specified by:
getNumVerticesin interfaceIntVertexData- Returns:
- the number of vertices this VertexData stores
-
getNumMaxVertices
public int getNumMaxVertices()- Specified by:
getNumMaxVerticesin interfaceIntVertexData- Returns:
- the number of vertices this VertedData can store
-
getBuffer
Description copied from interface:IntVertexDataReturns the underlying FloatBuffer and marks it as dirty, causing the buffer contents to be uploaded on the next call to bind. If you need immediate uploading useIntVertexData.setVertices(float[], int, int); Any modifications made to the Buffer *after* the call to bind will not automatically be uploaded.- Specified by:
getBufferin interfaceIntVertexData- Returns:
- the underlying FloatBuffer holding the vertex data.
-
setVertices
public void setVertices(float[] vertices, int offset, int count) Description copied from interface:IntVertexDataSets the vertices of this VertexData, discarding the old vertex data. The count must equal the number of floats per vertex times the number of vertices to be copied to this VertexData. The order of the vertex attributes must be the same as specified at construction time viaVertexAttributes.This can be called in between calls to bind and unbind. The vertex data will be updated instantly.
- Specified by:
setVerticesin interfaceIntVertexData- Parameters:
vertices- the vertex dataoffset- the offset to start copying the data fromcount- the number of floats to copy
-
updateVertices
public void updateVertices(int targetOffset, float[] vertices, int sourceOffset, int count) Description copied from interface:IntVertexDataUpdate (a portion of) the vertices. Does not resize the backing buffer.- Specified by:
updateVerticesin interfaceIntVertexDatavertices- the vertex datasourceOffset- the offset to start copying the data fromcount- the number of floats to copy
-
bind
Binds this VertexBufferObject for rendering via glDrawArrays or glDrawElements- Specified by:
bindin interfaceIntVertexData- Parameters:
shader- the shader
-
bind
Description copied from interface:IntVertexDataBinds this VertexData for rendering via glDrawArrays or glDrawElements.- Specified by:
bindin interfaceIntVertexDatalocations- array containing the attribute locations.
-
unbind
Unbinds this VertexBufferObject.- Specified by:
unbindin interfaceIntVertexData- Parameters:
shader- the shader
-
unbind
Description copied from interface:IntVertexDataUnbinds this VertexData.- Specified by:
unbindin interfaceIntVertexDatalocations- array containing the attribute locations.
-
invalidate
public void invalidate()Invalidates the VertexBufferObject so a new OpenGL buffer handle is created. Use this in case of a context loss.- Specified by:
invalidatein interfaceIntVertexData
-
dispose
public void dispose()Disposes of all resources this VertexBufferObject uses.- Specified by:
disposein interfacecom.badlogic.gdx.utils.Disposable- Specified by:
disposein interfaceIntVertexData
-