1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
| public class VBORenderer implements Renderer<SolidObjet> {
private GL gl = AbstractScene.GL;
private int verticesId;
// private int indexId;
private int nbVertices;
// private int nbIndex;
public void init(SolidObjet objet) {
VertexBufferObjectStructure vbo = objet.getStructure().getVertexBufferObject();
this.nbVertices = vbo.getNbVertices();
// this.nbIndex = vbo.getIndexNb();
// Generate a new buffer object
// Bind the buffer object
this.verticesId = generateID();
gl.glBindBufferARB(GL.GL_ARRAY_BUFFER_ARB, verticesId);
gl.glBufferDataARB(GL.GL_ARRAY_BUFFER_ARB, vbo.getVertexData().capacity() * BufferUtil.SIZEOF_FLOAT,
vbo.getVertexData(), GL.GL_STATIC_DRAW_ARB);
// // Index vertices
// this.indexId = generateID();
// gl.glBindBufferARB(GL.GL_ELEMENT_ARRAY_BUFFER, indexId);
// gl.glBufferDataARB(GL.GL_ELEMENT_ARRAY_BUFFER, vbo.getIndexData().capacity() *
// BufferUtil.SIZEOF_INT,
// vbo.getIndexData(), GL.GL_STATIC_DRAW_ARB);
}
public void render(SolidObjet objet) {
gl.glBindBufferARB(GL.GL_ARRAY_BUFFER_ARB, verticesId);
// gl.glBindBufferARB(GL.GL_ELEMENT_ARRAY_BUFFER, indexId);
// Enable Pointers
gl.glEnableClientState(GL.GL_VERTEX_ARRAY); // Enable Vertex Arrays
// Set The Vertex Pointer To The Vertex Buffer
gl.glVertexPointer(3, GL.GL_FLOAT, 0, 0);
// Render
// Draw All Of The Triangles At Once
gl.glDrawArrays(GL.GL_TRIANGLE_STRIP, 0, nbVertices);
// gl.glDrawArrays(GL.GL_POINTS, 0, nbVertices);
// gl.glDrawElements(GL.GL_TRIANGLES, nbIndex, GL.GL_UNSIGNED_INT, 0);
// gl.glDrawElements(GL.GL_POINT, nbIndex, GL.GL_UNSIGNED_INT, 0);
// Disable Pointers
// Disable Vertex Arrays
gl.glDisableClientState(GL.GL_VERTEX_ARRAY);
}
private int generateID() {
int[] tabId = new int[1];
gl.glGenBuffersARB(1, tabId, 0);
return tabId[0];
}
} |
Partager