diff options
author | Sven Gothel <[email protected]> | 2023-03-15 03:26:30 +0100 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2023-03-15 03:26:30 +0100 |
commit | c01a4ad712cfa2d1f8746daf161d9052c8acfccd (patch) | |
tree | 4f8a033905d0ffc63329f44726a9ea88c0b2977f /src/jogl/classes/jogamp | |
parent | 00dbacc5af3531af50e77a02d534dc11e08de10f (diff) |
Fix ShaderProgram ownership bug, introduced in commit 67a723477ecd818fbc5859fe20ee536a3b4efae5 (reverting and clarifying)
All Graph ShaderPrograms used are owned by RegionRenderer, not RenderState nor [GL]Region*,
hence [GL]Region* shall only nullify the resources but not destroy the shader currently in use.
One RegionRenderer maybe used for multuple Regions.
Diffstat (limited to 'src/jogl/classes/jogamp')
3 files changed, 9 insertions, 35 deletions
diff --git a/src/jogl/classes/jogamp/graph/curve/opengl/VBORegion2PMSAAES2.java b/src/jogl/classes/jogamp/graph/curve/opengl/VBORegion2PMSAAES2.java index c09e75b53..bc87b3faa 100644 --- a/src/jogl/classes/jogamp/graph/curve/opengl/VBORegion2PMSAAES2.java +++ b/src/jogl/classes/jogamp/graph/curve/opengl/VBORegion2PMSAAES2.java @@ -40,6 +40,7 @@ import com.jogamp.opengl.GLUniformData; import jogamp.graph.curve.opengl.shader.AttributeNames; import jogamp.graph.curve.opengl.shader.UniformNames; +import com.jogamp.graph.curve.Region; import com.jogamp.graph.curve.opengl.GLRegion; import com.jogamp.graph.curve.opengl.RegionRenderer; import com.jogamp.graph.curve.opengl.RenderState; @@ -322,7 +323,7 @@ public final class VBORegion2PMSAAES2 extends GLRegion { /** * <p> * Since multiple {@link Region}s may share one - * {@link ShaderProgram}, the uniform data must always be updated. + * {@link ShaderProgram} managed and owned by {@link RegionRendered}, the uniform data must always be updated. * </p> * * @param gl @@ -629,18 +630,6 @@ public final class VBORegion2PMSAAES2 extends GLRegion { } @Override - protected void clearShaderImpl(final GL2ES2 gl) { - if( null != spPass1 ) { - spPass1.destroy(gl); - spPass1 = null; - } - if( null != spPass2 ) { - spPass2.destroy(gl); - spPass2 = null; - } - } - - @Override protected void destroyImpl(final GL2ES2 gl) { if(DEBUG_INSTANCE) { System.err.println("VBORegion2PES2 Destroy: " + this); @@ -677,5 +666,7 @@ public final class VBORegion2PMSAAES2 extends GLRegion { indicesFbo.destroy(gl); indicesFbo = null; } + spPass1 = null; // owned by RegionRenderer + spPass2 = null; // owned by RegionRenderer } } diff --git a/src/jogl/classes/jogamp/graph/curve/opengl/VBORegion2PVBAAES2.java b/src/jogl/classes/jogamp/graph/curve/opengl/VBORegion2PVBAAES2.java index 96247c61a..21f454655 100644 --- a/src/jogl/classes/jogamp/graph/curve/opengl/VBORegion2PVBAAES2.java +++ b/src/jogl/classes/jogamp/graph/curve/opengl/VBORegion2PVBAAES2.java @@ -128,7 +128,7 @@ public final class VBORegion2PVBAAES2 extends GLRegion { /** * <p> * Since multiple {@link Region}s may share one - * {@link ShaderProgram}, the uniform data must always be updated. + * {@link ShaderProgram} managed and owned by {@link RegionRendered}, the uniform data must always be updated. * </p> * * @param gl @@ -762,18 +762,6 @@ public final class VBORegion2PVBAAES2 extends GLRegion { } @Override - protected void clearShaderImpl(final GL2ES2 gl) { - if( null != spPass1 ) { - spPass1.destroy(gl); - spPass1 = null; - } - if( null != spPass2 ) { - spPass2.destroy(gl); - spPass2 = null; - } - } - - @Override protected void destroyImpl(final GL2ES2 gl) { if(DEBUG_INSTANCE) { System.err.println("VBORegion2PES2 Destroy: " + this); @@ -813,5 +801,7 @@ public final class VBORegion2PVBAAES2 extends GLRegion { indicesFbo.destroy(gl); indicesFbo = null; } + spPass1 = null; // owned by RegionRenderer + spPass2 = null; // owned by RegionRenderer } } diff --git a/src/jogl/classes/jogamp/graph/curve/opengl/VBORegionSPES2.java b/src/jogl/classes/jogamp/graph/curve/opengl/VBORegionSPES2.java index b8bdfbe37..0077186e6 100644 --- a/src/jogl/classes/jogamp/graph/curve/opengl/VBORegionSPES2.java +++ b/src/jogl/classes/jogamp/graph/curve/opengl/VBORegionSPES2.java @@ -265,7 +265,7 @@ public final class VBORegionSPES2 extends GLRegion { /** * <p> * Since multiple {@link Region}s may share one - * {@link ShaderProgram}, the uniform data must always be updated. + * {@link ShaderProgram} managed and owned by {@link RegionRendered}, the uniform data must always be updated. * </p> * * @param gl @@ -345,14 +345,6 @@ public final class VBORegionSPES2 extends GLRegion { } @Override - protected void clearShaderImpl(final GL2ES2 gl) { - if( null != spPass1 ) { - spPass1.destroy(gl); - spPass1 = null; - } - } - - @Override protected void destroyImpl(final GL2ES2 gl) { if(DEBUG_INSTANCE) { System.err.println("VBORegionSPES2 Destroy: " + this); @@ -373,5 +365,6 @@ public final class VBORegionSPES2 extends GLRegion { indicesBuffer.destroy(gl); indicesBuffer = null; } + spPass1 = null; // owned by RegionRenderer } } |