List of usage examples for org.lwjgl.opengl GL15 glBufferSubData
public static void glBufferSubData(@NativeType("GLenum") int target, @NativeType("GLintptr") long offset, @NativeType("void const *") double[] data)
From source file:a1.gui.GUI_Map.java
License:Open Source License
private void updateVBO() { tile_drawCount = tile_Offset / 4;/*from ww w.j a va 2 s. c o m*/ tileGrid_drawCount = tileGrid_Offset / 2; claim_drawCount = claim_Offset / 6; FloatBuffer data = BufferUtils.createFloatBuffer(tile_Offset); data.put(tile_vboUpdate, 0, tile_Offset); data.flip(); GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, tile_vbo); GL15.glBufferSubData(GL15.GL_ARRAY_BUFFER, 0, data); data = BufferUtils.createFloatBuffer(tileGrid_Offset); data.put(tileGrid_vboUpdate, 0, tileGrid_Offset); data.flip(); GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, tileGrid_vbo); GL15.glBufferSubData(GL15.GL_ARRAY_BUFFER, 0, data); data = BufferUtils.createFloatBuffer(claim_Offset); data.put(claim_vboUpdate, 0, claim_Offset); data.flip(); GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, claim_vbo); GL15.glBufferSubData(GL15.GL_ARRAY_BUFFER, 0, data); GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0); tile_Offset = 0; tileGrid_Offset = 0; claim_Offset = 0; }
From source file:com.auroraengine.opengl.model.IndexBuffer.java
License:Open Source License
@Override public void update() throws GLException { // Need to update the buffer if it is able to if (index != 0 && permissions != GL15.GL_STATIC_DRAW) { // Edit according to the modifications of the buffer. GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, index); GLException.checkGL("Binding Buffer"); GL15.glBufferSubData(GL15.GL_ELEMENT_ARRAY_BUFFER, ib.position(), ib); GLException.checkGL("Setting Buffer Data"); }//from www . ja v a 2 s. c om }
From source file:com.auroraengine.opengl.model.VertexBuffer.java
License:Open Source License
@Override public void update() throws GLException { // Need to update the buffer if it is able to if (index != 0 && permissions != GL15.GL_STATIC_DRAW) { // Edit according to the modifications of the buffer. GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, index); GL15.glBufferSubData(GL15.GL_ARRAY_BUFFER, bb.position(), bb); }/*from www . ja v a 2 s. c o m*/ }
From source file:com.badlogic.gdx.backends.jglfw.JglfwGL20.java
License:Apache License
public void glBufferSubData(int target, int offset, int size, Buffer data) { if (data == null) throw new GdxRuntimeException("Using null for the data not possible, blame LWJGL"); else if (data instanceof ByteBuffer) GL15.glBufferSubData(target, offset, (ByteBuffer) data); else if (data instanceof IntBuffer) GL15.glBufferSubData(target, offset, (IntBuffer) data); else if (data instanceof FloatBuffer) GL15.glBufferSubData(target, offset, (FloatBuffer) data); else if (data instanceof DoubleBuffer) GL15.glBufferSubData(target, offset, (DoubleBuffer) data); else if (data instanceof ShortBuffer) // GL15.glBufferSubData(target, offset, (ShortBuffer) data); }
From source file:com.badlogic.gdx.backends.lwjgl.LwjglGL11.java
License:Apache License
public void glBufferSubData(int target, int offset, int size, Buffer data) { if (data instanceof ByteBuffer) GL15.glBufferSubData(target, offset, (ByteBuffer) data); else if (data instanceof IntBuffer) GL15.glBufferSubData(target, offset, (IntBuffer) data); else if (data instanceof FloatBuffer) GL15.glBufferSubData(target, offset, (FloatBuffer) data); else if (data instanceof DoubleBuffer) GL15.glBufferSubData(target, offset, (DoubleBuffer) data); else if (data instanceof ShortBuffer) // GL15.glBufferSubData(target, offset, (ShortBuffer) data); }
From source file:com.flowpowered.caustic.lwjgl.gl20.GL20VertexArray.java
License:MIT License
@Override public void setData(VertexData vertexData) { checkCreated();//ww w . j a v a 2s.c o m // Generate a new indices buffer if we don't have one yet if (indicesBufferID == 0) { indicesBufferID = GL15.glGenBuffers(); } // Bind the indices buffer GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, indicesBufferID); // Get the new count of indices final int newIndicesCount = vertexData.getIndicesCount(); // If the new count is greater than or 50% smaller than the old one, we'll reallocate the memory // In the first case because we need more space, in the other to save space if (newIndicesCount > indicesCount || newIndicesCount <= indicesCount * 0.5) { GL15.glBufferData(GL15.GL_ELEMENT_ARRAY_BUFFER, vertexData.getIndicesBuffer(), GL15.GL_STATIC_DRAW); } else { // Else, we replace the data with the new one, but we don't resize, so some old data might be left trailing in the buffer GL15.glBufferSubData(GL15.GL_ELEMENT_ARRAY_BUFFER, 0, vertexData.getIndicesBuffer()); } // Unbind the indices buffer GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, 0); // Update the total indices count indicesCount = newIndicesCount; // Ensure the count fits under the total one indicesDrawCount = indicesDrawCount <= 0 ? indicesCount : Math.min(indicesDrawCount, indicesCount); // Ensure that the indices offset and count fits inside the valid part of the buffer indicesOffset = Math.min(indicesOffset, indicesDrawCount - 1); indicesDrawCount -= indicesOffset; // Bind the vao if (extension.has()) { extension.glBindVertexArray(id); } // Create a new array of attribute buffers ID of the correct size final int attributeCount = vertexData.getAttributeCount(); final int[] newAttributeBufferIDs = new int[attributeCount]; // Copy all the old buffer IDs that will fit in the new array so we can reuse them System.arraycopy(attributeBufferIDs, 0, newAttributeBufferIDs, 0, Math.min(attributeBufferIDs.length, newAttributeBufferIDs.length)); // Delete any buffers that we don't need (new array is smaller than the previous one) for (int i = newAttributeBufferIDs.length; i < attributeBufferIDs.length; i++) { GL15.glDeleteBuffers(attributeBufferIDs[i]); } // Create new buffers if necessary (new array is larger than the previous one) for (int i = attributeBufferIDs.length; i < newAttributeBufferIDs.length; i++) { newAttributeBufferIDs[i] = GL15.glGenBuffers(); } // Copy the old valid attribute buffer sizes final int[] newAttributeBufferSizes = new int[attributeCount]; System.arraycopy(attributeBufferSizes, 0, newAttributeBufferSizes, 0, Math.min(attributeBufferSizes.length, newAttributeBufferSizes.length)); // If we don't have a vao, we have to save the properties manually if (!extension.has()) { attributeSizes = new int[attributeCount]; attributeTypes = new int[attributeCount]; attributeNormalizing = new boolean[attributeCount]; } // Upload the new vertex data for (int i = 0; i < attributeCount; i++) { final VertexAttribute attribute = vertexData.getAttribute(i); final ByteBuffer attributeData = attribute.getData(); // Get the current buffer size final int bufferSize = newAttributeBufferSizes[i]; // Get the new buffer size final int newBufferSize = attributeData.remaining(); // Bind the target buffer GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, newAttributeBufferIDs[i]); // If the new count is greater than or 50% smaller than the old one, we'll reallocate the memory if (newBufferSize > bufferSize || newBufferSize <= bufferSize * 0.5) { GL15.glBufferData(GL15.GL_ARRAY_BUFFER, attributeData, GL15.GL_STATIC_DRAW); } else { // Else, we replace the data with the new one, but we don't resize, so some old data might be left trailing in the buffer GL15.glBufferSubData(GL15.GL_ARRAY_BUFFER, 0, attributeData); } // Update the buffer size to the new one newAttributeBufferSizes[i] = newBufferSize; // Next, we add the pointer to the data in the vao if (extension.has()) { // As a float, normalized or not GL20.glVertexAttribPointer(i, attribute.getSize(), attribute.getType().getGLConstant(), attribute.getUploadMode().normalize(), 0, 0); // Enable the attribute GL20.glEnableVertexAttribArray(i); } else { // Else we save the properties for rendering attributeSizes[i] = attribute.getSize(); attributeTypes[i] = attribute.getType().getGLConstant(); attributeNormalizing[i] = attribute.getUploadMode().normalize(); } } // Unbind the last vbo GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0); // Unbind the vao if (extension.has()) { extension.glBindVertexArray(0); } // Update the attribute buffer IDs to the new ones attributeBufferIDs = newAttributeBufferIDs; // Update the attribute buffer sizes to the new ones attributeBufferSizes = newAttributeBufferSizes; // Check for errors LWJGLUtil.checkForGLError(); }
From source file:com.flowpowered.caustic.lwjgl.gl30.GL30VertexArray.java
License:MIT License
@Override public void setData(VertexData vertexData) { checkCreated();// w w w . jav a 2 s.co m // Generate a new indices buffer if we don't have one yet if (indicesBufferID == 0) { indicesBufferID = GL15.glGenBuffers(); } // Bind the indices buffer GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, indicesBufferID); // Get the new count of indices final int newIndicesCount = vertexData.getIndicesCount(); // If the new count is greater than or 50% smaller than the old one, we'll reallocate the memory // In the first case because we need more space, in the other to save space if (newIndicesCount > indicesCount || newIndicesCount <= indicesCount * 0.5) { GL15.glBufferData(GL15.GL_ELEMENT_ARRAY_BUFFER, vertexData.getIndicesBuffer(), GL15.GL_STATIC_DRAW); } else { // Else, we replace the data with the new one, but we don't resize, so some old data might be left trailing in the buffer GL15.glBufferSubData(GL15.GL_ELEMENT_ARRAY_BUFFER, 0, vertexData.getIndicesBuffer()); } // Unbind the indices buffer GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, 0); // Update the total indices count indicesCount = newIndicesCount; // Ensure the count fits under the total one indicesDrawCount = indicesDrawCount <= 0 ? indicesCount : Math.min(indicesDrawCount, indicesCount); // Ensure that the indices offset and count fits inside the valid part of the buffer indicesOffset = Math.min(indicesOffset, indicesDrawCount - 1); indicesDrawCount -= indicesOffset; // Bind the vao GL30.glBindVertexArray(id); // Create a new array of attribute buffers ID of the correct size final int attributeCount = vertexData.getAttributeCount(); final int[] newAttributeBufferIDs = new int[attributeCount]; // Copy all the old buffer IDs that will fit in the new array so we can reuse them System.arraycopy(attributeBufferIDs, 0, newAttributeBufferIDs, 0, Math.min(attributeBufferIDs.length, newAttributeBufferIDs.length)); // Delete any buffers that we don't need (new array is smaller than the previous one) for (int i = newAttributeBufferIDs.length; i < attributeBufferIDs.length; i++) { GL15.glDeleteBuffers(attributeBufferIDs[i]); } // Create new buffers if necessary (new array is larger than the previous one) for (int i = attributeBufferIDs.length; i < newAttributeBufferIDs.length; i++) { newAttributeBufferIDs[i] = GL15.glGenBuffers(); } // Copy the old valid attribute buffer sizes final int[] newAttributeBufferSizes = new int[attributeCount]; System.arraycopy(attributeBufferSizes, 0, newAttributeBufferSizes, 0, Math.min(attributeBufferSizes.length, newAttributeBufferSizes.length)); // Upload the new vertex data for (int i = 0; i < attributeCount; i++) { final VertexAttribute attribute = vertexData.getAttribute(i); final ByteBuffer attributeData = attribute.getData(); // Get the current buffer size final int bufferSize = newAttributeBufferSizes[i]; // Get the new buffer size final int newBufferSize = attributeData.remaining(); // Bind the target buffer GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, newAttributeBufferIDs[i]); // If the new count is greater than or 50% smaller than the old one, we'll reallocate the memory if (newBufferSize > bufferSize || newBufferSize <= bufferSize * 0.5) { GL15.glBufferData(GL15.GL_ARRAY_BUFFER, attributeData, GL15.GL_STATIC_DRAW); } else { // Else, we replace the data with the new one, but we don't resize, so some old data might be left trailing in the buffer GL15.glBufferSubData(GL15.GL_ARRAY_BUFFER, 0, attributeData); } // Update the buffer size to the new one newAttributeBufferSizes[i] = newBufferSize; // Next, we add the pointer to the data in the vao // We have three ways to interpret integer data if (attribute.getType().isInteger() && attribute.getUploadMode() == UploadMode.KEEP_INT) { // Directly as an int GL30.glVertexAttribIPointer(i, attribute.getSize(), attribute.getType().getGLConstant(), 0, 0); } else { // Or as a float, normalized or not GL20.glVertexAttribPointer(i, attribute.getSize(), attribute.getType().getGLConstant(), attribute.getUploadMode().normalize(), 0, 0); } // Finally enable the attribute GL20.glEnableVertexAttribArray(i); } // Unbind the last vbo GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0); // Unbind the vao GL30.glBindVertexArray(0); // Update the attribute buffer IDs to the new ones attributeBufferIDs = newAttributeBufferIDs; // Update the attribute buffer sizes to the new ones attributeBufferSizes = newAttributeBufferSizes; // Check for errors LWJGLUtil.checkForGLError(); }
From source file:com.grillecube.client.opengl.GLVertexBuffer.java
/** set the vbo data */ public void bufferData(int target, ByteBuffer data, int usage) { if (data == null) { this.bufferSize(target, 0, GL15.GL_STREAM_DRAW); this.byteCount = 0; } else {/*from www .ja v a2 s . c o m*/ GL15.glBufferData(target, data, usage); GL15.glBufferSubData(target, 0, data); this.byteCount = data.capacity(); } }
From source file:com.grillecube.engine.opengl.object.GLVertexBuffer.java
/** set the vbo data */ public void bufferData(int target, FloatBuffer data, int usage) { if (data == null) { this.bufferSize(target, 0, GL15.GL_STREAM_DRAW); this._float_count = 0; } else {//w w w .j a v a2 s . com GL15.glBufferData(target, data, usage); GL15.glBufferSubData(target, 0, data); this._float_count = data.capacity(); } }
From source file:com.xrbpowered.gl.res.shaders.FeedbackVertices.java
License:Open Source License
public void updateVertexData(float[] vertexData) { vertexBuffer.clear();/* w w w . j a v a 2 s . co m*/ vertexBuffer.put(vertexData); vertexBuffer.flip(); GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vboId); GL15.glBufferSubData(GL15.GL_ARRAY_BUFFER, 0, vertexBuffer); GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0); }