From accb57ec382460665eef74654154b8f3b698e1b1 Mon Sep 17 00:00:00 2001 From: phil Date: Tue, 20 Dec 2016 10:24:52 +1300 Subject: Jogl2es2pipeline: ignoreVertexColors load into shader was buggy --- .../java/org/jogamp/java3d/Jogl2es2Pipeline.java | 30 +++++++++++++++------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/src/main/java/org/jogamp/java3d/Jogl2es2Pipeline.java b/src/main/java/org/jogamp/java3d/Jogl2es2Pipeline.java index afd5a7a..c82494f 100644 --- a/src/main/java/org/jogamp/java3d/Jogl2es2Pipeline.java +++ b/src/main/java/org/jogamp/java3d/Jogl2es2Pipeline.java @@ -286,7 +286,7 @@ class Jogl2es2Pipeline extends Jogl2es2DEPPipeline ProgramData pd = ctx.programData; LocationData locs = pd.programToLocationData; - setFFPAttributes(ctx, gl, shaderProgramId, pd, vformat); + setFFPAttributes(ctx, gl, shaderProgramId, pd, vformat, ignoreVertexColors); int stride = 0, coordoff = 0, normoff = 0, coloroff = 0, texCoordoff = 0; int texSize = 0, texStride = 0; @@ -1000,7 +1000,7 @@ class Jogl2es2Pipeline extends Jogl2es2DEPPipeline ProgramData pd = ctx.programData; LocationData locs = pd.programToLocationData; - setFFPAttributes(ctx, gl, shaderProgramId, pd, vdefined); + setFFPAttributes(ctx, gl, shaderProgramId, pd, vdefined, ignoreVertexColors); // If any buffers need loading do that now GeometryData gd = loadAllBuffers(ctx, gl, geo, ignoreVertexColors, vertexCount, vformat, vdefined, fverts, vfcoords, dverts, @@ -1558,7 +1558,7 @@ class Jogl2es2Pipeline extends Jogl2es2DEPPipeline ProgramData pd = ctx.programData; LocationData locs = pd.programToLocationData; - setFFPAttributes(ctx, gl, shaderProgramId, pd, vformat); + setFFPAttributes(ctx, gl, shaderProgramId, pd, vformat, ignoreVertexColors); int stride = 0, coordoff = 0, normoff = 0, coloroff = 0, texCoordoff = 0; int texSize = 0, texStride = 0; @@ -2297,7 +2297,7 @@ class Jogl2es2Pipeline extends Jogl2es2DEPPipeline ProgramData pd = ctx.programData; LocationData locs = pd.programToLocationData; - setFFPAttributes(ctx, gl, shaderProgramId, pd, vdefined); + setFFPAttributes(ctx, gl, shaderProgramId, pd, vdefined, ignoreVertexColors); // If any buffers need loading do that now GeometryData gd = loadAllBuffers(ctx, gl, geo, ignoreVertexColors, vertexCount, vformat, vdefined, fverts, vfarray, dverts, @@ -2911,7 +2911,7 @@ class Jogl2es2Pipeline extends Jogl2es2DEPPipeline * @param vdefined */ - private static void setFFPAttributes(Jogl2es2Context ctx, GL2ES2 gl, int shaderProgramId, ProgramData pd, int vdefined) + private static void setFFPAttributes(Jogl2es2Context ctx, GL2ES2 gl, int shaderProgramId, ProgramData pd, int vdefined, boolean ignoreVertexColors) { LocationData locs = pd.programToLocationData; @@ -3089,18 +3089,30 @@ class Jogl2es2Pipeline extends Jogl2es2DEPPipeline if (locs.ignoreVertexColors != -1) { // vertex colors MUST be ignored if no glColors set - boolean ignoreVertexColors = (!floatColorsDefined && !byteColorsDefined) || ctx.renderingData.ignoreVertexColors == 1; + boolean finalIgnoreVertexColors = (!floatColorsDefined && !byteColorsDefined) || ctx.renderingData.ignoreVertexColors == 1; + + //TODO: the execute calls all have a separate ignore vertex colors bool, but it appears to add no value? + // is it just a legacy artifact of some sort? + /*if(finalIgnoreVertexColors != ignoreVertexColors ) + { + System.out.println("odd mismatch I wonder about why "); + System.out.println("finalIgnoreVertexColors " +finalIgnoreVertexColors+ " ignoreVertexColors " +ignoreVertexColors); + System.out.println("ctx.renderingData.ignoreVertexColors " +ctx.renderingData.ignoreVertexColors); + System.out.println("floatColorsDefined " +floatColorsDefined); + }*/ + + int finalIgnoreVertexColorsInt = finalIgnoreVertexColors ? 1 : 0; //note ctx.gl_state.ignoreVertexColors can be -1 for not set if (!MINIMISE_NATIVE_CALLS_FFP || (shaderProgramId != ctx.prevShaderProgram - || ctx.gl_state.ignoreVertexColors != ctx.renderingData.ignoreVertexColors)) + || ctx.gl_state.ignoreVertexColors != finalIgnoreVertexColorsInt)) { - gl.glUniform1i(locs.ignoreVertexColors, ignoreVertexColors ? 1 : 0);// note local variable used + gl.glUniform1i(locs.ignoreVertexColors, finalIgnoreVertexColorsInt);// note local variable used if (DO_OUTPUT_ERRORS) outputErrors(ctx); if (MINIMISE_NATIVE_CALLS_FFP) - ctx.gl_state.ignoreVertexColors = ctx.renderingData.ignoreVertexColors; + ctx.gl_state.ignoreVertexColors = finalIgnoreVertexColorsInt; } } -- cgit v1.2.3