List of usage examples for org.lwjgl.opengl GL15 GL_ARRAY_BUFFER
int GL_ARRAY_BUFFER
To view the source code for org.lwjgl.opengl GL15 GL_ARRAY_BUFFER.
Click Source Link
From source file:vertigo.graphics.lwjgl.LWJGL_Renderer.java
License:Open Source License
/** * Process the BO./*w ww.j a va2 s. c o m*/ * @param obj shape */ private void initVBO(Shape obj) { int nbBO = obj.getGeometry().getNumberBO(); //return 2 for the cube (1 vbo + 1 ibo) ib = BufferTools.newIntBuffer(nbBO); GL15.glGenBuffers(ib); int i = 0; for (BO bo : obj.getGeometry().getAllBO()) { int boHandle = ib.get(i); bo.setHandle(boHandle); if (bo instanceof IBO) { isIndexed = true; ibo = (IBO) bo; GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, boHandle); GL15.glBufferData(GL15.GL_ELEMENT_ARRAY_BUFFER, ibo.getIntBuffer(), GL15.GL_STATIC_DRAW); GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, 0); } else { VBO vbo = (VBO) bo; //if (!vbo.getBuffer().isLoaded() ) { GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, boHandle); GL15.glBufferData(GL15.GL_ARRAY_BUFFER, vbo.getFloatBuffer(), GL15.GL_STATIC_DRAW); GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0); //} } i++; } GL15.glDeleteBuffers(ib); }
From source file:view.renderer.GridRenderer.java
public void draw() { GL11.glEnableClientState(GL11.GL_VERTEX_ARRAY); GL11.glEnableClientState(GL11.GL_COLOR_ARRAY); GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vID); GL15.glBufferData(GL15.GL_ARRAY_BUFFER, vB, GL15.GL_STATIC_DRAW); GL11.glVertexPointer(2, GL11.GL_INT, 2 * 4, 0L); GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, cID); GL15.glBufferData(GL15.GL_ARRAY_BUFFER, cB, GL15.GL_STATIC_DRAW); GL11.glColorPointer(3, GL11.GL_FLOAT, 3 * 4, 0L); GL11.glDrawArrays(GL11.GL_QUADS, 0, (linesX + linesY) * 4); GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0); GL11.glDisableClientState(GL11.GL_COLOR_ARRAY); GL11.glDisableClientState(GL11.GL_VERTEX_ARRAY); }
From source file:voxels.Mesh.java
License:Open Source License
private void createMesh() { // We'll define our quad using 4 vertices of the custom 'TexturedVertex' class VertexData v0 = new VertexData(); v0.setXYZ(-0.5f, 0.5f, 0.5f);//from www . ja v a 2 s . co m v0.setRGB(1, 0, 0); v0.setST(0, 0); VertexData v1 = new VertexData(); v1.setXYZ(-0.5f, -0.5f, 0.5f); v1.setRGB(0, 1, 0); v1.setST(0, 1); VertexData v2 = new VertexData(); v2.setXYZ(0.5f, -0.5f, 0.5f); v2.setRGB(0, 0, 1); v2.setST(1, 1); VertexData v3 = new VertexData(); v3.setXYZ(0.5f, 0.5f, 0.5f); v3.setRGB(1, 1, 1); v3.setST(1, 0); VertexData v4 = new VertexData(); v4.setXYZ(-0.5f, 0.5f, -0.5f); v4.setRGB(1, 0, 0); v4.setST(0, 0); VertexData v5 = new VertexData(); v5.setXYZ(-0.5f, -0.5f, -0.5f); v5.setRGB(0, 1, 0); v5.setST(0, 1); VertexData v6 = new VertexData(); v6.setXYZ(-0.5f, -0.5f, 0.5f); v6.setRGB(0, 0, 1); v6.setST(1, 1); VertexData v7 = new VertexData(); v7.setXYZ(-0.5f, 0.5f, 0.5f); v7.setRGB(1, 1, 1); v7.setST(1, 0); VertexData v8 = new VertexData(); v8.setXYZ(-0.5f, 0.5f, -0.5f); v8.setRGB(1, 0, 0); v8.setST(0, 0); VertexData v9 = new VertexData(); v9.setXYZ(-0.5f, 0.5f, 0.5f); v9.setRGB(0, 1, 0); v9.setST(0, 1); VertexData v10 = new VertexData(); v10.setXYZ(0.5f, 0.5f, 0.5f); v10.setRGB(0, 0, 1); v10.setST(1, 1); VertexData v11 = new VertexData(); v11.setXYZ(0.5f, 0.5f, -0.5f); v11.setRGB(1, 1, 1); v11.setST(1, 0); VertexData v12 = new VertexData(); v12.setXYZ(0.5f, -0.5f, 0.5f); v12.setRGB(1, 0, 0); v12.setST(0, 0); VertexData v13 = new VertexData(); v13.setXYZ(-0.5f, -0.5f, 0.5f); v13.setRGB(0, 1, 0); v13.setST(0, 1); VertexData v14 = new VertexData(); v14.setXYZ(-0.5f, -0.5f, -0.5f); v14.setRGB(0, 0, 1); v14.setST(1, 1); VertexData v15 = new VertexData(); v15.setXYZ(0.5f, -0.5f, -0.5f); v15.setRGB(1, 1, 1); v15.setST(1, 0); VertexData v16 = new VertexData(); v16.setXYZ(0.5f, -0.5f, -0.5f); v16.setRGB(1, 0, 0); v16.setST(0, 0); VertexData v17 = new VertexData(); v17.setXYZ(-0.5f, -0.5f, -0.5f); v17.setRGB(0, 1, 0); v17.setST(0, 1); VertexData v18 = new VertexData(); v18.setXYZ(-0.5f, 0.5f, -0.5f); v18.setRGB(0, 0, 1); v18.setST(1, 1); VertexData v19 = new VertexData(); v19.setXYZ(0.5f, 0.5f, -0.5f); v19.setRGB(1, 1, 1); v19.setST(1, 0); VertexData v20 = new VertexData(); v20.setXYZ(0.5f, -0.5f, 0.5f); v20.setRGB(1, 0, 0); v20.setST(0, 0); VertexData v21 = new VertexData(); v21.setXYZ(0.5f, -0.5f, -0.5f); v21.setRGB(0, 1, 0); v21.setST(0, 1); VertexData v22 = new VertexData(); v22.setXYZ(0.5f, 0.5f, -0.5f); v22.setRGB(0, 0, 1); v22.setST(1, 1); VertexData v23 = new VertexData(); v23.setXYZ(0.5f, 0.5f, 0.5f); v23.setRGB(1, 1, 1); v23.setST(1, 0); vertices = new VertexData[] { v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23 }; // Put each 'Vertex' in one FloatBuffer verticesByteBuffer = BufferUtils.createByteBuffer(vertices.length * VertexData.stride); FloatBuffer verticesFloatBuffer = verticesByteBuffer.asFloatBuffer(); for (VertexData vertice : vertices) { // Add position, color and texture floats to the buffer verticesFloatBuffer.put(vertice.getElements()); } verticesFloatBuffer.flip(); // OpenGL expects to draw vertices in counter clockwise order by default short[] indices = new short[6 * vertices.length / 4]; for (short i = 0; i < indices.length / 6; i++) { // 0, 1, 2, 2, 3, 0,4, 5 , 0, 5, 1, 0, 1, 5, 2, 5, 6, 2, 3, 0, 7, 0, 2, 7, 8, 6, 4, 6, 5, 4, 2, 3, 8, 3, 6, 8 indices[i * 6 + 0] = (short) (0 + 4 * i); indices[i * 6 + 1] = (short) (1 + 4 * i); indices[i * 6 + 2] = (short) (2 + 4 * i); indices[i * 6 + 3] = (short) (2 + 4 * i); indices[i * 6 + 4] = (short) (3 + 4 * i); indices[i * 6 + 5] = (short) (0 + 4 * i); } //indices = new byte[]{0, 1, 2, 2, 3, 0,4, 5 , 0, 5, 1, 0, 1, 5, 2, 5, 6, 2, 3, 0, 7, 0, 2, 7, 8, 6, 4, 6, 5, 4, 2, 3, 8, 3, 6, 8}; vertices = null; indicesCount = indices.length; ShortBuffer indicesBuffer = BufferUtils.createShortBuffer(indicesCount); indicesBuffer.put(indices); indicesBuffer.flip(); // Create a new Vertex Array Object in memory and select it (bind) vaoId = GL30.glGenVertexArrays(); GL30.glBindVertexArray(vaoId); // Create a new Vertex Buffer Object in memory and select it (bind) vboId = GL15.glGenBuffers(); GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vboId); GL15.glBufferData(GL15.GL_ARRAY_BUFFER, verticesFloatBuffer, GL15.GL_STREAM_DRAW); // Put the position coordinates in attribute list 0 GL20.glVertexAttribPointer(0, VertexData.positionElementCount, GL11.GL_FLOAT, false, VertexData.stride, VertexData.positionByteOffset); // Put the color components in attribute list 1 GL20.glVertexAttribPointer(1, VertexData.colorElementCount, GL11.GL_FLOAT, false, VertexData.stride, VertexData.colorByteOffset); // Put the texture coordinates in attribute list 2 GL20.glVertexAttribPointer(2, VertexData.textureElementCount, GL11.GL_FLOAT, false, VertexData.stride, VertexData.textureByteOffset); GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0); // Deselect (bind to 0) the VAO GL30.glBindVertexArray(0); // Create a new VBO for the indices and select it (bind) - INDICES vboiId = GL15.glGenBuffers(); GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, vboiId); GL15.glBufferData(GL15.GL_ELEMENT_ARRAY_BUFFER, indicesBuffer, GL15.GL_STATIC_DRAW); GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, 0); }
From source file:voxicity.ChunkNode.java
License:Open Source License
public void clean() { last_update = Time.get_time_ms(); vert_buf = GL15.glGenBuffers();//w w w . ja v a 2 s . co m tex_buf = GL15.glGenBuffers(); if (shader_prog == 0) create_shader_prog(); int offset = 0; verts.clear(); tex_coords.clear(); batches.clear(); Map<Integer, IntBuffer> id_ind = new HashMap<Integer, IntBuffer>(); BlockChunkLoc loc = new BlockChunkLoc(0, 0, 0, chunk); // Iterate through all blocks in the chunk for (int i = 0; i < Constants.Chunk.side_length; i++) for (int j = 0; j < Constants.Chunk.side_length; j++) for (int k = 0; k < Constants.Chunk.side_length; k++) { // Get block id int id = chunk.get_block(i, j, k); // If air, do nothing, next block if (id != Constants.Blocks.air) { loc.x = i; loc.y = j; loc.z = k; Block b = Blocks.get(id); // If culled, do nothing, next block if (!cull(loc) && !chunk_edge_cull(loc)) { // Get the vertices for this block and put them in the verts buffer verts.put(Coord.offset_coords(b.vertices(), new Vector3f(pos.x + loc.x, pos.y + loc.y, pos.z + loc.z))); // Get the texture coords for this block and put them in the tex_coords buffer tex_coords.put(b.texture_coords()); // Look up the texture for these vertices int tex_id = TextureManager.get_texture(b.texture_string()); // Look up the index buffer for this texture and create it if needed if (!id_ind.containsKey(tex_id)) id_ind.put(tex_id, BufferUtils.createIntBuffer(24 * Constants.Chunk.block_number)); // Get the index buffer for this texture IntBuffer ind_buf = id_ind.get(tex_id); // Get the indices for this block's vertices and put them in the ind_buf buffer after offsetting them IntBuffer block_indices = b.indices(); while (block_indices.hasRemaining()) ind_buf.put(block_indices.get() + offset); // Increase the offset by the number of indices offset += block_indices.position(); } } } if (verts.position() == 0) { empty = true; dirty = false; return; } verts.limit(verts.position()).rewind(); tex_coords.limit(tex_coords.position()).rewind(); System.out.println(verts.limit() + " " + tex_coords.limit()); AABB box = new AABB(Constants.Chunk.side_length, Constants.Chunk.side_length, Constants.Chunk.side_length); box.center_on(pos.x + box.dimensions().x, pos.y + box.dimensions().y, pos.z + box.dimensions().z); // Pass the buffer to a VBO System.out.println("Binding vertex buffer"); GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vert_buf); Util.checkGLError(); System.out.println("Setting buffer data"); GL15.glBufferData(GL15.GL_ARRAY_BUFFER, verts, GL15.GL_STATIC_DRAW); Util.checkGLError(); System.out.println("Vertex buffer data set"); System.out.println("Size of vertex buffer is: " + GL15.glGetBufferParameter(GL15.GL_ARRAY_BUFFER, GL15.GL_BUFFER_SIZE)); // Pass the buffer to a VBO System.out.println("Binding tex coord buffer"); GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, tex_buf); Util.checkGLError(); System.out.println("Setting buffer data"); GL15.glBufferData(GL15.GL_ARRAY_BUFFER, tex_coords, GL15.GL_STATIC_DRAW); Util.checkGLError(); System.out.println("Size of tex coord buffer is: " + GL15.glGetBufferParameter(GL15.GL_ARRAY_BUFFER, GL15.GL_BUFFER_SIZE)); for (Map.Entry<Integer, IntBuffer> entry : id_ind.entrySet()) { entry.getValue().limit(entry.getValue().position()).rewind(); IntBuffer ibo = BufferUtils.createIntBuffer(1); GL15.glGenBuffers(ibo); if (ibo.get(0) == 0) System.out.println("Could not generate buffer object!"); GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, ibo.get(0)); Util.checkGLError(); GL15.glBufferData(GL15.GL_ELEMENT_ARRAY_BUFFER, entry.getValue(), GL15.GL_STATIC_DRAW); Util.checkGLError(); System.out.println("Size of index buffer is: " + GL15.glGetBufferParameter(GL15.GL_ELEMENT_ARRAY_BUFFER, GL15.GL_BUFFER_SIZE) + " with " + entry.getValue().limit() + " indices"); System.out.println( "Creating batch: " + entry.getKey() + " " + ibo.get(0) + " " + entry.getValue().limit()); batches.add(new Batch(entry.getKey(), ibo.get(0), entry.getValue().limit(), shader_prog, tex_buf, vert_buf, box)); GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0); GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, 0); } empty = false; dirty = false; }
From source file:voxicity.ChunkNode.java
License:Open Source License
public void render(Frustum camera) { if (empty)//from w w w . j ava 2 s. c o m return; AABB chunk_box = new AABB(Constants.Chunk.side_length, Constants.Chunk.side_length, Constants.Chunk.side_length); chunk_box.center_on(chunk.get_x() + chunk_box.dimensions().x, chunk.get_y() + chunk_box.dimensions().y, chunk.get_z() + chunk_box.dimensions().z); if (!camera.collides(chunk_box)) return; Renderer.draw_calls++; if (shader_prog != 0) GL20.glUseProgram(shader_prog); // Bind VBO to vertex pointer GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vert_buf); GL11.glVertexPointer(3, GL11.GL_FLOAT, 0, 0); // Bind the texture coord VBO to texture pointer GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, tex_buf); GL11.glTexCoordPointer(2, GL11.GL_FLOAT, 0, 0); int tex_bak = GL11.glGetInteger(GL11.GL_TEXTURE_BINDING_2D); for (Batch batch : batches) { // Bind the texture for this batch GL11.glBindTexture(GL11.GL_TEXTURE_2D, batch.tex); // Bind index array GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, batch.indices); // Draw the block GL12.glDrawRangeElements(GL11.GL_QUADS, 0, Constants.Chunk.block_number * 24 - 1, batch.num_elements, GL11.GL_UNSIGNED_INT, 0); Renderer.batch_draw_calls++; Renderer.quads += batch.num_elements; } // Unbind the texture GL11.glBindTexture(GL11.GL_TEXTURE_2D, tex_bak); // Unbind all buffers GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, 0); GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0); // Disable the shader once more if (shader_prog != 0) GL20.glUseProgram(0); }
From source file:voxicity.Renderer.java
License:Open Source License
private void render_batch(ChunkNode.Batch batch) { if (!camera.collides(batch.box)) return;//from w w w . ja v a 2s.co m Renderer.draw_calls++; // Use the shader the batch needs GL20.glUseProgram(batch.shader); // Bind VBO to vertex pointer GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, batch.vert_buf); GL11.glVertexPointer(3, GL11.GL_FLOAT, 0, 0); // Bind the texture coord VBO to texture pointer GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, batch.tex_buf); GL11.glTexCoordPointer(2, GL11.GL_FLOAT, 0, 0); // Bind the texture for this batch GL11.glBindTexture(GL11.GL_TEXTURE_2D, batch.tex); // Bind index array GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, batch.indices); // Draw the block GL12.glDrawRangeElements(GL11.GL_QUADS, 0, Constants.Chunk.block_number * 24 - 1, batch.num_elements, GL11.GL_UNSIGNED_INT, 0); Renderer.batch_draw_calls++; Renderer.quads += batch.num_elements; // Unbind the texture GL11.glBindTexture(GL11.GL_TEXTURE_2D, 0); // Unbind all buffers GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, 0); GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0); GL20.glUseProgram(0); }
From source file:wrapper.vbo.Vbo.java
License:Open Source License
public void create(Vertex2d[] coordinates) { vertex = BufferUtils.createFloatBuffer(coordinates.length * 2); texture = BufferUtils.createFloatBuffer(coordinates.length * 2); vertcount = coordinates.length;/*from w w w . j av a 2s . c om*/ maxlength = vertcount; for (int i = 0; i < coordinates.length; i++) { vertex.put(coordinates[i].x); vertex.put(coordinates[i].y); texture.put(coordinates[i].u); texture.put(coordinates[i].v); } vertid = GL15.glGenBuffers(); texcoordid = GL15.glGenBuffers(); vertex.rewind(); texture.rewind(); GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vertid); GL15.glBufferData(GL15.GL_ARRAY_BUFFER, vertex, GL15.GL_DYNAMIC_DRAW); GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, texcoordid); GL15.glBufferData(GL15.GL_ARRAY_BUFFER, texture, GL15.GL_DYNAMIC_DRAW); GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0); }
From source file:wrapper.vbo.Vbo.java
License:Open Source License
public void create(Vertex3d[] coordinates) { vertex = BufferUtils.createFloatBuffer(coordinates.length * 3); texture = BufferUtils.createFloatBuffer(coordinates.length * 2); vertcount = coordinates.length;//from w ww .ja v a 2 s . co m maxlength = vertcount; for (int i = 0; i < coordinates.length; i++) { vertex.put(coordinates[i].x); vertex.put(coordinates[i].y); vertex.put(coordinates[i].z); texture.put(coordinates[i].u); texture.put(coordinates[i].v); } vertid = GL15.glGenBuffers(); texcoordid = GL15.glGenBuffers(); vertex.rewind(); texture.rewind(); GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vertid); GL15.glBufferData(GL15.GL_ARRAY_BUFFER, vertex, GL15.GL_DYNAMIC_DRAW); GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, texcoordid); GL15.glBufferData(GL15.GL_ARRAY_BUFFER, texture, GL15.GL_DYNAMIC_DRAW); GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0); }
From source file:wrapper.vbo.Vbo.java
License:Open Source License
public void create(ProgressiveBuffer[] b) {// coordinates are NOT bound by // this// w w w .j a v a 2 s .c o m vertex = b[0].get_data(); texture = b[1].get_data(); vertcount = b[0].get_data().limit(); maxlength = vertcount; vertex.rewind(); texture.rewind(); vertid = GL15.glGenBuffers(); texcoordid = GL15.glGenBuffers(); GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vertid); GL15.glBufferData(GL15.GL_ARRAY_BUFFER, vertex, GL15.GL_DYNAMIC_DRAW); GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, texcoordid); GL15.glBufferData(GL15.GL_ARRAY_BUFFER, texture, GL15.GL_DYNAMIC_DRAW); GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0); }
From source file:wrapper.vbo.Vbo.java
License:Open Source License
public void create(int size) { maxlength = size;/*from w ww. j a v a 2 s . com*/ vertex = BufferUtils.createFloatBuffer(size); texture = BufferUtils.createFloatBuffer(size); vertcount = 0; vertex.rewind(); texture.rewind(); vertid = GL15.glGenBuffers(); texcoordid = GL15.glGenBuffers(); GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vertid); GL15.glBufferData(GL15.GL_ARRAY_BUFFER, vertex, GL15.GL_DYNAMIC_DRAW); GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, texcoordid); GL15.glBufferData(GL15.GL_ARRAY_BUFFER, texture, GL15.GL_DYNAMIC_DRAW); GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0); }