/** * Creates vertex buffer objects to render this skybox. * * @param gl OpenGL interface */ private void createVBO(GL gl) { FloatBuffer vertexBuffer = BufferUtil.newFloatBuffer(324); // 36 faces, 3 vertices per face, 3 co-ordinates per vertex FloatBuffer textureBuffer = BufferUtil.newFloatBuffer(216); // 36 faces, 3 vertices per face, 2 co-ordinates per vertex nVertices = populateVBOWithVertices(vertexBuffer); vertexBuffer.flip(); populateVBOWithTextureCoords(textureBuffer); textureBuffer.flip(); gl.glGenBuffersARB(2, VBOIds, 0); // Load buffer into graphics card memory // Vertex coordinates gl.glBindBufferARB(GL.GL_ARRAY_BUFFER_ARB, VBOIds[0]); // Bind The Buffer gl.glBufferDataARB( GL.GL_ARRAY_BUFFER_ARB, nVertices * 3 * BufferUtil.SIZEOF_FLOAT, vertexBuffer, GL.GL_STATIC_DRAW_ARB); gl.glBindBufferARB(GL.GL_ARRAY_BUFFER_ARB, VBOIds[1]); gl.glBufferDataARB( GL.GL_ARRAY_BUFFER_ARB, nVertices * 2 * BufferUtil.SIZEOF_FLOAT, textureBuffer, GL.GL_STATIC_DRAW_ARB); vertexBuffer = null; textureBuffer = null; }
private void buildLeavesVBO(GL gl) { // Allocate buffer memory FloatBuffer leafVertexBuffer = BufferUtil.newFloatBuffer(81 * 6 * 3); FloatBuffer leafTextureBuffer = BufferUtil.newFloatBuffer(81 * 6 * 2); nLeafVertices = tree.createLeavesVBO(leafVertexBuffer, leafTextureBuffer); leafVertexBuffer.flip(); leafTextureBuffer.flip(); // Create VBO Id if (branchVBOIds[0] != 0) { gl.glDeleteBuffersARB(2, leafVBOIds, 0); } gl.glGenBuffersARB(2, leafVBOIds, 0); // Get Valid Names // Load buffer into graphics card memory // Vertex coordinates gl.glBindBufferARB(GL.GL_ARRAY_BUFFER_ARB, leafVBOIds[0]); // Bind The Buffer gl.glBufferDataARB( GL.GL_ARRAY_BUFFER_ARB, nLeafVertices * 3 * BufferUtil.SIZEOF_FLOAT, leafVertexBuffer, GL.GL_STATIC_DRAW_ARB); gl.glBindBufferARB(GL.GL_ARRAY_BUFFER_ARB, leafVBOIds[1]); gl.glBufferDataARB( GL.GL_ARRAY_BUFFER_ARB, nLeafVertices * 2 * BufferUtil.SIZEOF_FLOAT, leafTextureBuffer, GL.GL_STATIC_DRAW_ARB); leafVertexBuffer = null; leafTextureBuffer = null; }
public static int createGLResource(int type, int param) { int id = 0; if (type == GL_TEXTURE_OBJECT) { int[] temp = new int[1]; gl.glGenTextures(1, temp, 0); id = temp[0]; glTextureObjects.add(id); } else if (type == GL_VERTEX_BUFFER) { int[] temp = new int[1]; gl.glGenBuffersARB(1, temp, 0); id = temp[0]; glVertexBuffers.add(id); } else if (type == GL_FRAME_BUFFER) { int[] temp = new int[1]; gl.glGenFramebuffersEXT(1, temp, 0); id = temp[0]; glFrameBuffers.add(id); } else if (type == GL_RENDER_BUFFER) { int[] temp = new int[1]; gl.glGenRenderbuffersEXT(1, temp, 0); id = temp[0]; glRenderBuffers.add(id); } else if (type == GLSL_PROGRAM) { id = gl.glCreateProgram(); glslPrograms.add(id); } else if (type == GLSL_SHADER) { id = gl.glCreateShader(param); glslShaders.add(id); } return id; }
private void buildFruitVBO(GL gl) { // Allocate buffer memory FloatBuffer vertexBuffer = BufferUtil.newFloatBuffer( 40 * 36 * 3); // 40 fruits, 36 vertices per fruit, 3 coordinates per vertex FloatBuffer normalBuffer = BufferUtil.newFloatBuffer(40 * 36 * 3); FloatBuffer textureCoordBuffer = BufferUtil.newFloatBuffer(40 * 36 * 2); // FloatBuffer attributeBuffer = BufferUtil.newFloatBuffer(40 * 36 * 4); // FloatBuffer baseCenterBuffer = BufferUtil.newFloatBuffer(40 * 36 * 3); // FloatBuffer transformationRow1Buffer = BufferUtil.newFloatBuffer(40 * 36 * 4); // FloatBuffer transformationRow2Buffer = BufferUtil.newFloatBuffer(40 * 36 * 4); // FloatBuffer transformationRow3Buffer = BufferUtil.newFloatBuffer(40 * 36 * 4); // FloatBuffer transformationRow4Buffer = BufferUtil.newFloatBuffer(40 * 36 * 4); nFruitVertices = tree.createFruitVBO(vertexBuffer, normalBuffer, textureCoordBuffer); // attributeBuffer, baseCenterBuffer, transformationRow1Buffer, transformationRow2Buffer, // transformationRow3Buffer, transformationRow4Buffer); vertexBuffer.flip(); normalBuffer.flip(); textureCoordBuffer.flip(); // attributeBuffer.flip(); // baseCenterBuffer.flip(); // transformationRow1Buffer.flip(); // transformationRow2Buffer.flip(); // transformationRow3Buffer.flip(); // transformationRow4Buffer.flip(); // Create VBO Id gl.glGenBuffersARB(1, fruitVBOIds, 0); // Get Valid Names // Load buffer into graphics card memory // Vertex coordinates gl.glBindBufferARB(GL.GL_ARRAY_BUFFER_ARB, fruitVBOIds[0]); // Bind The Buffer gl.glBufferDataARB( GL.GL_ARRAY_BUFFER_ARB, nFruitVertices * 3 * BufferUtil.SIZEOF_FLOAT, vertexBuffer, GL.GL_DYNAMIC_DRAW_ARB); // //Vertex attributes // gl.glBindBufferARB(GL.GL_ARRAY_BUFFER_ARB, fruitVBOIds[1]); // gl.glBufferDataARB(GL.GL_ARRAY_BUFFER_ARB, nFruitVertices * 4 * // BufferUtil.SIZEOF_FLOAT, attributeBuffer, GL.GL_DYNAMIC_DRAW_ARB); // // //branch base centers // gl.glBindBufferARB(GL.GL_ARRAY_BUFFER_ARB, fruitVBOIds[2]); // gl.glBufferDataARB(GL.GL_ARRAY_BUFFER_ARB, nFruitVertices * 3 * // BufferUtil.SIZEOF_FLOAT, baseCenterBuffer, GL.GL_DYNAMIC_DRAW_ARB); // // //branch transformations // gl.glBindBufferARB(GL.GL_ARRAY_BUFFER_ARB, fruitVBOIds[3]); // gl.glBufferDataARB(GL.GL_ARRAY_BUFFER_ARB, nFruitVertices * 4 * // BufferUtil.SIZEOF_FLOAT, transformationRow1Buffer, GL.GL_STATIC_DRAW_ARB); // // gl.glBindBufferARB(GL.GL_ARRAY_BUFFER_ARB, fruitVBOIds[4]); // gl.glBufferDataARB(GL.GL_ARRAY_BUFFER_ARB, nFruitVertices * 4 * // BufferUtil.SIZEOF_FLOAT, transformationRow2Buffer, GL.GL_STATIC_DRAW_ARB); // // gl.glBindBufferARB(GL.GL_ARRAY_BUFFER_ARB, fruitVBOIds[5]); // gl.glBufferDataARB(GL.GL_ARRAY_BUFFER_ARB, nFruitVertices * 4 * // BufferUtil.SIZEOF_FLOAT, transformationRow3Buffer, GL.GL_STATIC_DRAW_ARB); // // gl.glBindBufferARB(GL.GL_ARRAY_BUFFER_ARB, fruitVBOIds[6]); // gl.glBufferDataARB(GL.GL_ARRAY_BUFFER_ARB, nFruitVertices * 4 * // BufferUtil.SIZEOF_FLOAT, transformationRow4Buffer, GL.GL_DYNAMIC_DRAW_ARB); // Our Copy Of The Data Is No Longer Necessary, It Is Safe In The Graphics Card vertexBuffer = null; textureCoordBuffer = null; // attributeBuffer = null; // baseCenterBuffer = null; // transformationRow1Buffer = null; // transformationRow2Buffer = null; // transformationRow3Buffer = null; // transformationRow4Buffer = null; }
private void buildBranchVBO(GL gl) { // Allocate buffer memory FloatBuffer branchVertices = BufferUtil.newFloatBuffer( 40 * 24 * 3); // 40 branches, 24 vertices per branch, 3 coordinates per vertex FloatBuffer normalBuffer = BufferUtil.newFloatBuffer(40 * 24 * 3); FloatBuffer textureCoordBuffer = BufferUtil.newFloatBuffer(40 * 24 * 2); // FloatBuffer branchAttributes = BufferUtil.newFloatBuffer(40 * 24 * 4); // FloatBuffer branchBaseCenters = BufferUtil.newFloatBuffer(40 * 24 * 3); // FloatBuffer branchTransformationsRow1 = BufferUtil.newFloatBuffer(40 * 24 * 4); // FloatBuffer branchTransformationsRow2 = BufferUtil.newFloatBuffer(40 * 24 * 4); // FloatBuffer branchTransformationsRow3 = BufferUtil.newFloatBuffer(40 * 24 * 4); // FloatBuffer branchTransformationsRow4 = BufferUtil.newFloatBuffer(40 * 24 * 4); // FloatBuffer colorBuffer = BufferUtil.newFloatBuffer(40 * 24 * 4); if (tree.needsGeometryCreation()) { // Create the tree - creates child branches and leaves and adds vertices to the buffer nBranchVertices = tree.create(branchVertices, normalBuffer, textureCoordBuffer); // branchAttributes, branchBaseCenters, branchTransformationsRow1, // branchTransformationsRow2, branchTransformationsRow3, branchTransformationsRow4); } else { // hasFreshlyGrown returns true here // Grow the tree - updates bounding box of each branch and adds vertices to the buffer // System.out.println("Calling trunk.grow()"); nBranchVertices = tree.grow(branchVertices, normalBuffer, textureCoordBuffer); // branchAttributes, branchBaseCenters, branchTransformationsRow1, // branchTransformationsRow2, branchTransformationsRow3, branchTransformationsRow4); } branchVertices.flip(); normalBuffer.flip(); textureCoordBuffer.flip(); // branchAttributes.flip(); // branchBaseCenters.flip(); // branchTransformationsRow1.flip(); // branchTransformationsRow2.flip(); // branchTransformationsRow3.flip(); // branchTransformationsRow4.flip(); // Create VBO Id if (branchVBOIds[0] != 0) { gl.glDeleteBuffersARB(1, branchVBOIds, 0); } // System.out.println("branchVBOIds[2] = " + branchVBOIds[2]); gl.glGenBuffersARB(1, branchVBOIds, 0); // Get Valid Names // Load buffer into graphics card memory // Vertex coordinates gl.glBindBufferARB(GL.GL_ARRAY_BUFFER_ARB, branchVBOIds[0]); // Bind The Buffer gl.glBufferDataARB( GL.GL_ARRAY_BUFFER_ARB, nBranchVertices * 3 * BufferUtil.SIZEOF_FLOAT, branchVertices, GL.GL_STATIC_DRAW_ARB); // //Vertex attributes // gl.glBindBufferARB(GL.GL_ARRAY_BUFFER_ARB, branchVBOIds[1]); // gl.glBufferDataARB(GL.GL_ARRAY_BUFFER_ARB, nBranchVertices * 4 * // BufferUtil.SIZEOF_FLOAT, branchAttributes, GL.GL_STATIC_DRAW_ARB); // // //branch base centers // gl.glBindBufferARB(GL.GL_ARRAY_BUFFER_ARB, branchVBOIds[2]); // gl.glBufferDataARB(GL.GL_ARRAY_BUFFER_ARB, nBranchVertices * 3 * // BufferUtil.SIZEOF_FLOAT, branchBaseCenters, GL.GL_STATIC_DRAW_ARB); // // //branch transformations // gl.glBindBufferARB(GL.GL_ARRAY_BUFFER_ARB, branchVBOIds[3]); // gl.glBufferDataARB(GL.GL_ARRAY_BUFFER_ARB, nBranchVertices * 4 * // BufferUtil.SIZEOF_FLOAT, branchTransformationsRow1, GL.GL_STATIC_DRAW_ARB); // // gl.glBindBufferARB(GL.GL_ARRAY_BUFFER_ARB, branchVBOIds[4]); // gl.glBufferDataARB(GL.GL_ARRAY_BUFFER_ARB, nBranchVertices * 4 * // BufferUtil.SIZEOF_FLOAT, branchTransformationsRow2, GL.GL_STATIC_DRAW_ARB); // // gl.glBindBufferARB(GL.GL_ARRAY_BUFFER_ARB, branchVBOIds[5]); // gl.glBufferDataARB(GL.GL_ARRAY_BUFFER_ARB, nBranchVertices * 4 * // BufferUtil.SIZEOF_FLOAT, branchTransformationsRow3, GL.GL_STATIC_DRAW_ARB); // // gl.glBindBufferARB(GL.GL_ARRAY_BUFFER_ARB, branchVBOIds[6]); // gl.glBufferDataARB(GL.GL_ARRAY_BUFFER_ARB, nBranchVertices * 4 * // BufferUtil.SIZEOF_FLOAT, branchTransformationsRow4, GL.GL_STATIC_DRAW_ARB); // Our Copy Of The Data Is No Longer Necessary, It Is Safe In The Graphics Card branchVertices = null; textureCoordBuffer = null; // branchAttributes = null; // branchBaseCenters = null; // branchTransformationsRow1 = null; // branchTransformationsRow2 = null; // branchTransformationsRow3 = null; // branchTransformationsRow4 = null; // colorBuffer = null; }
private void buildHeapVBO(GL gl) { // Allocate buffer memory FloatBuffer branchVertices = BufferUtil.newFloatBuffer( 24 * 3); // 1 bounding box of heap, 24 vertices of the box, 3 coordinates per vertex FloatBuffer textureCoordBuffer = BufferUtil.newFloatBuffer(24 * 3); // FloatBuffer branchAttributes = BufferUtil.newFloatBuffer(24 * 4); // FloatBuffer branchBaseCenters = BufferUtil.newFloatBuffer(24 * 3); // FloatBuffer branchTransformationsRow1 = BufferUtil.newFloatBuffer(24 * 4); // FloatBuffer branchTransformationsRow2 = BufferUtil.newFloatBuffer(24 * 4); // FloatBuffer branchTransformationsRow3 = BufferUtil.newFloatBuffer(24 * 4); // FloatBuffer branchTransformationsRow4 = BufferUtil.newFloatBuffer(24 * 4); // Create bounding box for the heap nBranchVertices = tree.createHeapBoundingBox(branchVertices, textureCoordBuffer); // branchAttributes, branchBaseCenters, branchTransformationsRow1, branchTransformationsRow2, // branchTransformationsRow3, branchTransformationsRow4); branchVertices.flip(); textureCoordBuffer.flip(); // branchAttributes.flip(); // branchBaseCenters.flip(); // branchTransformationsRow1.flip(); // branchTransformationsRow2.flip(); // branchTransformationsRow3.flip(); // branchTransformationsRow4.flip(); if (branchVBOIds[0] != 0) { gl.glDeleteBuffersARB(1, branchVBOIds, 0); } // Create VBO Id gl.glGenBuffersARB(1, branchVBOIds, 0); // Get Valid Names // Load buffer into graphics card memory // Vertex coordinates gl.glBindBufferARB(GL.GL_ARRAY_BUFFER_ARB, branchVBOIds[0]); // Bind The Buffer gl.glBufferDataARB( GL.GL_ARRAY_BUFFER_ARB, nBranchVertices * 3 * BufferUtil.SIZEOF_FLOAT, branchVertices, GL.GL_STATIC_DRAW_ARB); // //Vertex attributes // gl.glBindBufferARB(GL.GL_ARRAY_BUFFER_ARB, branchVBOIds[1]); // gl.glBufferDataARB(GL.GL_ARRAY_BUFFER_ARB, nBranchVertices * 4 * // BufferUtil.SIZEOF_FLOAT, branchAttributes, GL.GL_STATIC_DRAW_ARB); // // //branch base centers // gl.glBindBufferARB(GL.GL_ARRAY_BUFFER_ARB, branchVBOIds[2]); // gl.glBufferDataARB(GL.GL_ARRAY_BUFFER_ARB, nBranchVertices * 3 * // BufferUtil.SIZEOF_FLOAT, branchBaseCenters, GL.GL_STATIC_DRAW_ARB); // // //branch transformations // gl.glBindBufferARB(GL.GL_ARRAY_BUFFER_ARB, branchVBOIds[3]); // gl.glBufferDataARB(GL.GL_ARRAY_BUFFER_ARB, nBranchVertices * 4 * // BufferUtil.SIZEOF_FLOAT, branchTransformationsRow1, GL.GL_STATIC_DRAW_ARB); // // gl.glBindBufferARB(GL.GL_ARRAY_BUFFER_ARB, branchVBOIds[4]); // gl.glBufferDataARB(GL.GL_ARRAY_BUFFER_ARB, nBranchVertices * 4 * // BufferUtil.SIZEOF_FLOAT, branchTransformationsRow2, GL.GL_STATIC_DRAW_ARB); // // gl.glBindBufferARB(GL.GL_ARRAY_BUFFER_ARB, branchVBOIds[5]); // gl.glBufferDataARB(GL.GL_ARRAY_BUFFER_ARB, nBranchVertices * 4 * // BufferUtil.SIZEOF_FLOAT, branchTransformationsRow3, GL.GL_STATIC_DRAW_ARB); // // gl.glBindBufferARB(GL.GL_ARRAY_BUFFER_ARB, branchVBOIds[6]); // gl.glBufferDataARB(GL.GL_ARRAY_BUFFER_ARB, nBranchVertices * 4 * // BufferUtil.SIZEOF_FLOAT, branchTransformationsRow4, GL.GL_STATIC_DRAW_ARB); // Our Copy Of The Data Is No Longer Necessary, It Is Safe In The Graphics Card branchVertices = null; textureCoordBuffer = null; // branchAttributes = null; // branchBaseCenters = null; // branchTransformationsRow1 = null; // branchTransformationsRow2 = null; // branchTransformationsRow3 = null; // branchTransformationsRow4 = null; }