From 1ac5a3f0643a761d2d9e217883da73ad993a91b9 Mon Sep 17 00:00:00 2001 From: Sven Gothel Date: Tue, 30 Aug 2011 15:41:00 +0200 Subject: ShaderState Usage/Test: Add setShaderState(GL) for pre-use attachment to the GL context ; GLArrayDataClient-GLSL: Check if ShaderState is attached. ShaderState Usage/Test: Add setShaderState(GL) for pre-use attachment to the GL context - test cases utilize ShaderState before useProgram() was invoked, hence we need an API entry to attach the ShaderState explictly GLArrayDataClient-GLSL: Check if ShaderState is attached. - catch error case of non bound ShaderState to GL context --- .../test/junit/jogl/glsl/GLSLMiscHelper.java | 28 +++++++------ .../junit/jogl/glsl/TestGLSLShaderState01NEWT.java | 46 +++++++++++----------- .../junit/jogl/glsl/TestGLSLShaderState02NEWT.java | 45 ++++++++++----------- 3 files changed, 63 insertions(+), 56 deletions(-) (limited to 'src/test') diff --git a/src/test/com/jogamp/opengl/test/junit/jogl/glsl/GLSLMiscHelper.java b/src/test/com/jogamp/opengl/test/junit/jogl/glsl/GLSLMiscHelper.java index c83af4362..ae08b640c 100644 --- a/src/test/com/jogamp/opengl/test/junit/jogl/glsl/GLSLMiscHelper.java +++ b/src/test/com/jogamp/opengl/test/junit/jogl/glsl/GLSLMiscHelper.java @@ -40,7 +40,8 @@ public class GLSLMiscHelper { public static final int frames_perftest = 10000; // frames public static final int frames_warmup = 500; // frames - public static void validateGLArrayDataServerState(GL2ES2 gl, ShaderState st, GLArrayDataServer data) { + public static void validateGLArrayDataServerState(GL2ES2 gl, GLArrayDataServer data) { + final ShaderState st = ShaderState.getShaderState(gl); int[] qi = new int[1]; if(null != st) { Assert.assertEquals(data, st.getAttribute(data.getName())); @@ -65,7 +66,7 @@ public class GLSLMiscHelper { } } - public static void displayVCArrays(GLDrawable drawable, GL2ES2 gl, ShaderState st, boolean preEnable, GLArrayDataServer vertices, GLArrayDataServer colors, boolean postDisable, int num, long postDelay) throws InterruptedException { + public static void displayVCArrays(GLDrawable drawable, GL2ES2 gl, boolean preEnable, GLArrayDataServer vertices, GLArrayDataServer colors, boolean postDisable, int num, long postDelay) throws InterruptedException { System.err.println("screen #"+num); if(preEnable) { vertices.enableBuffer(gl, true); @@ -80,8 +81,8 @@ public class GLSLMiscHelper { Assert.assertTrue(vertices.enabled()); Assert.assertTrue(colors.enabled()); - validateGLArrayDataServerState(gl, st, vertices); - validateGLArrayDataServerState(gl, st, colors); + validateGLArrayDataServerState(gl, vertices); + validateGLArrayDataServerState(gl, colors); gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); gl.glDrawArrays(GL.GL_TRIANGLE_STRIP, 0, 4); Assert.assertEquals(GL.GL_NO_ERROR, gl.glGetError()); @@ -110,7 +111,9 @@ public class GLSLMiscHelper { drawable.swapBuffers(); } - public static GLArrayDataServer createRSVertices0(GL2ES2 gl, ShaderState st, int location) { + public static GLArrayDataServer createRSVertices0(GL2ES2 gl, int location) { + final ShaderState st = ShaderState.getShaderState(gl); + // Allocate Vertex Array0 GLArrayDataServer vertices0 = GLArrayDataServer.createGLSL("mgl_Vertex", 3, GL.GL_FLOAT, false, 4, GL.GL_STATIC_DRAW); if(0<=location) { @@ -130,11 +133,11 @@ public class GLSLMiscHelper { Assert.assertEquals(4, vertices0.getElementCount()); Assert.assertEquals(GL.GL_NO_ERROR, gl.glGetError()); Assert.assertEquals(vertices0.getVBOName(), gl.glGetBoundBuffer(GL.GL_ARRAY_BUFFER)); - validateGLArrayDataServerState(gl, st, vertices0); + validateGLArrayDataServerState(gl, vertices0); return vertices0; } - public static GLArrayDataServer createRSVertices1(GL2ES2 gl, ShaderState st) { + public static GLArrayDataServer createRSVertices1(GL2ES2 gl) { GLArrayDataServer vertices1 = GLArrayDataServer.createGLSL("mgl_Vertex", 3, GL.GL_FLOAT, false, 4, GL.GL_STATIC_DRAW); Assert.assertTrue(vertices1.isVBO()); Assert.assertTrue(vertices1.isVertexAttribute()); @@ -150,11 +153,12 @@ public class GLSLMiscHelper { Assert.assertEquals(4, vertices1.getElementCount()); Assert.assertEquals(GL.GL_NO_ERROR, gl.glGetError()); Assert.assertEquals(vertices1.getVBOName(), gl.glGetBoundBuffer(GL.GL_ARRAY_BUFFER)); - validateGLArrayDataServerState(gl, st, vertices1); + validateGLArrayDataServerState(gl, vertices1); return vertices1; } - public static GLArrayDataServer createRSColors0(GL2ES2 gl, ShaderState st, int location) { + public static GLArrayDataServer createRSColors0(GL2ES2 gl, int location) { + final ShaderState st = ShaderState.getShaderState(gl); GLArrayDataServer colors0 = GLArrayDataServer.createGLSL("mgl_Color", 4, GL.GL_FLOAT, false, 4, GL.GL_STATIC_DRAW); if(0<=location) { st.bindAttribLocation(gl, location, colors0); @@ -170,11 +174,11 @@ public class GLSLMiscHelper { Assert.assertTrue(colors0.sealed()); Assert.assertEquals(GL.GL_NO_ERROR, gl.glGetError()); Assert.assertEquals(colors0.getVBOName(), gl.glGetBoundBuffer(GL.GL_ARRAY_BUFFER)); - validateGLArrayDataServerState(gl, st, colors0); + validateGLArrayDataServerState(gl, colors0); return colors0; } - public static GLArrayDataServer createRSColors1(GL2ES2 gl, ShaderState st) { + public static GLArrayDataServer createRSColors1(GL2ES2 gl) { // Allocate Color Array1 GLArrayDataServer colors1 = GLArrayDataServer.createGLSL("mgl_Color", 4, GL.GL_FLOAT, false, 4, GL.GL_STATIC_DRAW); colors1.putf(1); colors1.putf(0); colors1.putf(1); colors1.putf(1); @@ -188,7 +192,7 @@ public class GLSLMiscHelper { Assert.assertTrue(colors1.sealed()); Assert.assertEquals(GL.GL_NO_ERROR, gl.glGetError()); Assert.assertEquals(colors1.getVBOName(), gl.glGetBoundBuffer(GL.GL_ARRAY_BUFFER)); - validateGLArrayDataServerState(gl, st, colors1); + validateGLArrayDataServerState(gl, colors1); return colors1; } } diff --git a/src/test/com/jogamp/opengl/test/junit/jogl/glsl/TestGLSLShaderState01NEWT.java b/src/test/com/jogamp/opengl/test/junit/jogl/glsl/TestGLSLShaderState01NEWT.java index b8551527e..4b7617d63 100644 --- a/src/test/com/jogamp/opengl/test/junit/jogl/glsl/TestGLSLShaderState01NEWT.java +++ b/src/test/com/jogamp/opengl/test/junit/jogl/glsl/TestGLSLShaderState01NEWT.java @@ -88,15 +88,19 @@ public class TestGLSLShaderState01NEWT extends UITestCase { st.attachShaderProgram(gl, sp); + Assert.assertEquals(null, ShaderState.getShaderState(gl)); + st.setShaderState(gl); // pre-use attach + Assert.assertEquals(st, ShaderState.getShaderState(gl)); + // Allocate Vertex Array0 - final GLArrayDataServer vertices0 = GLSLMiscHelper.createRSVertices0(gl, st, vertices0_loc); + final GLArrayDataServer vertices0 = GLSLMiscHelper.createRSVertices0(gl, vertices0_loc); System.err.println("vertices0: " + vertices0); vertices0.enableBuffer(gl, false); Assert.assertEquals(vertices0_loc, vertices0.getLocation()); st.ownAttribute(vertices0, true); // Allocate Color Array0 - final GLArrayDataServer colors0 = GLSLMiscHelper.createRSColors0(gl, st, colors0_loc); + final GLArrayDataServer colors0 = GLSLMiscHelper.createRSColors0(gl, colors0_loc); System.err.println("colors0: " + colors0); colors0.enableBuffer(gl, false); Assert.assertEquals(colors0_loc, colors0.getLocation()); @@ -107,16 +111,14 @@ public class TestGLSLShaderState01NEWT extends UITestCase { Assert.assertEquals(GL.GL_NO_ERROR, gl.glGetError()); Assert.assertEquals(vertices0_loc, vertices0.getLocation()); - GLSLMiscHelper.validateGLArrayDataServerState(gl, st, vertices0); + GLSLMiscHelper.validateGLArrayDataServerState(gl, vertices0); Assert.assertEquals(colors0_loc, colors0.getLocation()); - GLSLMiscHelper.validateGLArrayDataServerState(gl, st, colors0); + GLSLMiscHelper.validateGLArrayDataServerState(gl, colors0); - Assert.assertEquals(null, ShaderState.getShaderState(gl)); st.useProgram(gl, true); Assert.assertTrue(sp.inUse()); Assert.assertEquals(GL.GL_NO_ERROR, gl.glGetError()); - Assert.assertEquals(st, ShaderState.getShaderState(gl)); // setup mgl_PMVMatrix final PMVMatrix pmvMatrix = new PMVMatrix(); @@ -129,17 +131,17 @@ public class TestGLSLShaderState01NEWT extends UITestCase { Assert.assertEquals(pmvMatrixUniform, st.getUniform("mgl_PMVMatrix")); // Allocate Vertex Array1 - final GLArrayDataServer vertices1 = GLSLMiscHelper.createRSVertices1(gl, st); + final GLArrayDataServer vertices1 = GLSLMiscHelper.createRSVertices1(gl); System.err.println("vertices1: " + vertices1); vertices1.enableBuffer(gl, false); - GLSLMiscHelper.validateGLArrayDataServerState(gl, st, vertices1); + GLSLMiscHelper.validateGLArrayDataServerState(gl, vertices1); st.ownAttribute(vertices1, true); // Allocate Color Array1 - final GLArrayDataServer colors1 = GLSLMiscHelper.createRSColors1(gl, st); + final GLArrayDataServer colors1 = GLSLMiscHelper.createRSColors1(gl); System.err.println("colors1: " + colors1); colors1.enableBuffer(gl, false); - GLSLMiscHelper.validateGLArrayDataServerState(gl, st, colors1); + GLSLMiscHelper.validateGLArrayDataServerState(gl, colors1); st.ownAttribute(colors0, true); // misc GL setup @@ -159,13 +161,13 @@ public class TestGLSLShaderState01NEWT extends UITestCase { Assert.assertEquals(GL.GL_NO_ERROR, gl.glGetError()); // display #1 vertices0 / colors0 (post-disable) - GLSLMiscHelper.displayVCArrays(drawable, gl, st, true, vertices0, colors0, true, 1, durationPerTest); + GLSLMiscHelper.displayVCArrays(drawable, gl, true, vertices0, colors0, true, 1, durationPerTest); // display #2 #1 vertices1 / colors1 (post-disable) - GLSLMiscHelper.displayVCArrays(drawable, gl, st, true, vertices1, colors1, true, 2, durationPerTest); + GLSLMiscHelper.displayVCArrays(drawable, gl, true, vertices1, colors1, true, 2, durationPerTest); // display #3 vertices0 / colors0 (post-disable) - GLSLMiscHelper.displayVCArrays(drawable, gl, st, true, vertices0, colors0, true, 3, durationPerTest); + GLSLMiscHelper.displayVCArrays(drawable, gl, true, vertices0, colors0, true, 3, durationPerTest); // cleanup st.destroy(gl); @@ -217,12 +219,12 @@ public class TestGLSLShaderState01NEWT extends UITestCase { st.uniform(gl, pmvMatrixUniform); // Allocate Vertex Array0 - final GLArrayDataServer vertices0 = GLSLMiscHelper.createRSVertices0(gl, st, -1); + final GLArrayDataServer vertices0 = GLSLMiscHelper.createRSVertices0(gl, -1); st.ownAttribute(vertices0, true); vertices0.enableBuffer(gl, toggleEnable ? false : true); // Allocate Color Array0 - final GLArrayDataServer colors0 = GLSLMiscHelper.createRSColors0(gl, st, -1); + final GLArrayDataServer colors0 = GLSLMiscHelper.createRSColors0(gl, -1); st.ownAttribute(colors0, true); colors0.enableBuffer(gl, toggleEnable ? false : true); @@ -243,7 +245,7 @@ public class TestGLSLShaderState01NEWT extends UITestCase { gl.setSwapInterval(0); // validation .. - GLSLMiscHelper.displayVCArrays(drawable, gl, st, toggleEnable, vertices0, colors0, toggleEnable, 1, 0); + GLSLMiscHelper.displayVCArrays(drawable, gl, toggleEnable, vertices0, colors0, toggleEnable, 1, 0); // warmup .. for(int frames=0; frames