diff --git a/src/main/java/bdv/jogl/VolumeRenderer/ShaderPrograms/AbstractShaderSceneElement.java b/src/main/java/bdv/jogl/VolumeRenderer/ShaderPrograms/AbstractShaderSceneElement.java index 939e0caf92e5e40a88d629f3ae4051f00deb1939..e7b6ae2edfa9a42d7395f23581ebc23a5b065c33 100644 --- a/src/main/java/bdv/jogl/VolumeRenderer/ShaderPrograms/AbstractShaderSceneElement.java +++ b/src/main/java/bdv/jogl/VolumeRenderer/ShaderPrograms/AbstractShaderSceneElement.java @@ -231,6 +231,16 @@ public abstract class AbstractShaderSceneElement implements ISceneElements{ return shaderVariableMapping.get(variableName); } + protected int getLocationSafe(GL4 gl2, final String variableName){ + Integer i = shaderVariableMapping.get(variableName); + if ( i != null ) + return i; + + int location = gl2.glGetUniformLocation(shaderProgram.program(), variableName); + shaderVariableMapping.put(variableName, location); + return location; + } + /** * Sub class uniform upload diff --git a/src/main/java/bdv/jogl/VolumeRenderer/ShaderPrograms/MultiVolumeRenderer.java b/src/main/java/bdv/jogl/VolumeRenderer/ShaderPrograms/MultiVolumeRenderer.java index cb6ed582707c992f7042bfecca6087bc1d66dd6a..09179bcb84c17b8b651a8b43237d5f1b80a11d28 100644 --- a/src/main/java/bdv/jogl/VolumeRenderer/ShaderPrograms/MultiVolumeRenderer.java +++ b/src/main/java/bdv/jogl/VolumeRenderer/ShaderPrograms/MultiVolumeRenderer.java @@ -441,7 +441,7 @@ public class MultiVolumeRenderer extends AbstractShaderSceneElement{ Matrix4 localInverse = copyMatrix(calcVolumeTransformation(data)); localInverse.invert(); - gl2.glUniformMatrix4fv(getLocation(suvTextureTransformationInverse)+index, + gl2.glUniformMatrix4fv(getLocationSafe(gl2, suvTextureTransformationInverse+"["+index+"]"), 1,false,localInverse.getMatrix(),0); } }