28package com.jogamp.opengl.test.junit.jogl.util;
30import java.nio.ByteBuffer;
31import java.nio.FloatBuffer;
33import com.jogamp.opengl.GL;
34import com.jogamp.opengl.GL2ES1;
35import com.jogamp.opengl.GLAutoDrawable;
36import com.jogamp.opengl.GLEventListener;
37import com.jogamp.opengl.GLException;
38import com.jogamp.opengl.fixedfunc.GLMatrixFunc;
39import com.jogamp.opengl.fixedfunc.GLPointerFunc;
40import com.jogamp.opengl.glu.GLU;
41import com.jogamp.opengl.glu.gl2es1.GLUgl2es1;
43import com.jogamp.common.nio.Buffers;
44import com.jogamp.opengl.util.GLArrayDataWrapper;
45import com.jogamp.opengl.util.GLBuffers;
47class DemoGL2ES1Plain
implements GLEventListener {
48 final boolean useArrayData;
52 final float[] vertices =
new float[] { 0, 0, 0,
53 TestImmModeSinkES1NEWT.iWidth, 0, 0,
54 TestImmModeSinkES1NEWT.iWidth / 2, TestImmModeSinkES1NEWT.iHeight, 0 };
56 final float[] colors =
new float[] { 1, 0, 0,
60 final ByteBuffer bufferAll;
61 final int bufferVOffset, bufferCOffset;
62 final int bufferVSize, bufferCSize;
63 final FloatBuffer bufferC, bufferV;
64 final int[] vboName =
new int[] { 0 };
65 final GLArrayDataWrapper arrayC, arrayV;
67 DemoGL2ES1Plain(
final boolean useArrayData,
final boolean useVBO) {
68 this.useArrayData = useArrayData;
70 this.glu =
new GLUgl2es1();
72 bufferAll = Buffers.newDirectByteBuffer( ( colors.length + vertices.length ) * Buffers.SIZEOF_FLOAT );
75 bufferVSize = 3*3*GLBuffers.sizeOfGLType(GL.GL_FLOAT);
76 bufferCOffset = bufferVSize;
77 bufferCSize = 3*3*GLBuffers.sizeOfGLType(GL.GL_FLOAT);
79 bufferV = (FloatBuffer) GLBuffers.sliceGLBuffer(bufferAll, bufferVOffset, bufferVSize, GL.GL_FLOAT);
80 bufferV.put(vertices, 0, vertices.length).rewind();
81 bufferC = (FloatBuffer) GLBuffers.sliceGLBuffer(bufferAll, bufferCOffset, bufferCSize, GL.GL_FLOAT);
82 bufferC.put(colors, 0, colors.length).rewind();
84 System.err.println(
"bufferAll: "+bufferAll+
", byteOffset "+Buffers.getDirectBufferByteOffset(bufferAll));
85 System.err.println(
"bufferV: off "+bufferVOffset+
", size "+bufferVSize+
": "+bufferV+
", byteOffset "+Buffers.getDirectBufferByteOffset(bufferV));
86 System.err.println(
"bufferC: off "+bufferCOffset+
", size "+bufferCSize+
": "+bufferC+
", byteOffset "+Buffers.getDirectBufferByteOffset(bufferC));
89 arrayV = GLArrayDataWrapper.createFixed(GLPointerFunc.GL_VERTEX_ARRAY, 3, GL.GL_FLOAT,
false, 0,
90 bufferV, 0, bufferVOffset, GL.GL_STATIC_DRAW, GL.GL_ARRAY_BUFFER);
92 arrayC = GLArrayDataWrapper.createFixed(GLPointerFunc.GL_COLOR_ARRAY, 3, GL.GL_FLOAT,
false, 0,
93 bufferC, 0, bufferCOffset, GL.GL_STATIC_DRAW, GL.GL_ARRAY_BUFFER);
101 public void init(
final GLAutoDrawable drawable) {
102 final GL gl = drawable.getGL();
103 System.err.println(
"GL_VENDOR "+gl.glGetString(GL.GL_VENDOR));
104 System.err.println(
"GL_RENDERER "+gl.glGetString(GL.GL_RENDERER));
105 System.err.println(
"GL_VERSION "+gl.glGetString(GL.GL_VERSION));
107 gl.glGenBuffers(1, vboName, 0);
108 if(0 == vboName[0]) {
109 throw new GLException(
"glGenBuffers didn't return valid VBO name");
115 public void reshape(
final GLAutoDrawable drawable,
final int x,
final int y,
final int width,
final int height) {
116 final GL2ES1 gl = drawable.getGL().getGL2ES1();
118 gl.glMatrixMode( GLMatrixFunc.GL_PROJECTION );
122 glu.gluOrtho2D( 0.0f, width, 0.0f, height );
124 gl.glMatrixMode( GLMatrixFunc.GL_MODELVIEW );
127 gl.glViewport( 0, 0, width, height );
131 public void display(
final GLAutoDrawable drawable) {
132 final GL2ES1 gl = drawable.getGL().getGL2ES1();
134 gl.glClear( GL.GL_COLOR_BUFFER_BIT );
140 gl.glBindBuffer(GL.GL_ARRAY_BUFFER, vboName[0]);
141 gl.glBufferData(GL.GL_ARRAY_BUFFER, bufferAll.limit(), bufferAll, GL.GL_STATIC_DRAW);
143 arrayV.setVBOName(vboName[0]);
144 arrayC.setVBOName(vboName[0]);
148 gl.glEnableClientState(GLPointerFunc.GL_VERTEX_ARRAY);
150 gl.glVertexPointer(arrayV);
153 gl.glVertexPointer(3, GL.GL_FLOAT, 0, bufferVOffset);
155 gl.glVertexPointer(3, GL.GL_FLOAT, 0, bufferV);
159 gl.glEnableClientState(GLPointerFunc.GL_COLOR_ARRAY);
161 gl.glColorPointer(arrayC);
164 gl.glColorPointer(3, GL.GL_FLOAT, 0, bufferCOffset);
166 gl.glColorPointer(3, GL.GL_FLOAT, 0, bufferC);
171 gl.glBindBuffer(GL.GL_ARRAY_BUFFER, 0);
174 gl.glDrawArrays(GL.GL_TRIANGLES, 0, 3);
177 gl.glDisableClientState(GLPointerFunc.GL_COLOR_ARRAY);
178 gl.glDisableClientState(GLPointerFunc.GL_VERTEX_ARRAY);
182 public void dispose(
final GLAutoDrawable drawable) {
183 final GL gl = drawable.getGL();
184 if(0 != vboName[0]) {
185 gl.glDeleteBuffers(1, vboName, 0);