package org.ege.gl; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.FloatBuffer; import java.nio.IntBuffer; import java.nio.ShortBuffer; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.GL10; import com.badlogic.gdx.graphics.GL11; import com.badlogic.gdx.utils.BufferUtils; public class AxisDrawer { FloatBuffer mVertexBuffer; ShortBuffer mIndices; final IntBuffer mHandle = BufferUtils.newIntBuffer(1); final int mVerticesName; final int mIndicesName; public AxisDrawer(){ ByteBuffer tmp = ByteBuffer.allocateDirect((3+4)*6*4); tmp.order(ByteOrder.nativeOrder()); mVertexBuffer = tmp.asFloatBuffer(); // vertices float[] vertices = new float[]{ //Ox - red 0 ,0,0,1,0,0,1, 1000,0,0,1,0,0,1, //Oy - green 0,0 ,0,0,1,0,1, 0,1000,0,0,1,0,1, //Oz - blue 0,0,0 ,0,0,1,1, 0,0,1000,0,0,1,1, }; mVertexBuffer.put(vertices); mVertexBuffer.flip(); // indices tmp = ByteBuffer.allocateDirect(2*6); tmp.order(ByteOrder.nativeOrder()); mIndices = tmp.asShortBuffer(); short[] indices = new short[]{ 0,1,2,3,4,5 }; mIndices.put(indices); mIndices.flip(); final GL11 gl = Gdx.gl11; //gen VRAM vertices buffer gl.glGenBuffers(1, mHandle); mVerticesName = mHandle.get(0); mHandle.clear(); gl.glBindBuffer(GL11.GL_ARRAY_BUFFER, mVerticesName); gl.glBufferData(GL11.GL_ARRAY_BUFFER, vertices.length*4, mVertexBuffer, GL11.GL_STATIC_DRAW); gl.glBindBuffer(GL11.GL_ARRAY_BUFFER, 0); // gen VRAM indices buffer gl.glGenBuffers(1, mHandle); mIndicesName = mHandle.get(0); mHandle.clear(); gl.glBindBuffer(GL11.GL_ELEMENT_ARRAY_BUFFER, mIndicesName); gl.glBufferData(GL11.GL_ELEMENT_ARRAY_BUFFER, indices.length*2, mIndices, GL11.GL_STATIC_DRAW); gl.glBindBuffer(GL11.GL_ELEMENT_ARRAY_BUFFER, 0); } public void render(){ final GL11 gl = Gdx.gl11; gl.glDisable(GL10.GL_LIGHTING); gl.glDisable(GL10.GL_TEXTURE_2D); gl.glLineWidth(2); gl.glEnable(GL10.GL_LINE_SMOOTH); gl.glBindBuffer(GL11.GL_ARRAY_BUFFER, mVerticesName); gl.glBindBuffer(GL11.GL_ELEMENT_ARRAY_BUFFER, mIndicesName); gl.glEnableClientState(GL11.GL_VERTEX_ARRAY); gl.glVertexPointer(3, GL10.GL_FLOAT, 7*4, 0); gl.glEnableClientState(GL11.GL_COLOR_ARRAY); gl.glColorPointer(4, GL10.GL_FLOAT, 7*4, 3*4); gl.glDrawElements(GL11.GL_LINES, 6, GL11.GL_UNSIGNED_SHORT, 0); gl.glDisable(GL10.GL_LINE_SMOOTH); } }