aboutsummaryrefslogtreecommitdiffstats
path: root/src/jogl/classes/jogamp
diff options
context:
space:
mode:
authorSven Göthel <[email protected]>2024-01-16 05:02:24 +0100
committerSven Göthel <[email protected]>2024-01-16 05:02:24 +0100
commit6b1979992a7da2573c420ce3eb22f35abcbd35b7 (patch)
tree5786a3286a773ccc3082977e1888c13b3f481dc9 /src/jogl/classes/jogamp
parent33ec9480da3d414a4c973607970afa06b5ed79ca (diff)
Graph/GraphUI AA-Quality + SampleCount (shader): Push params down to RegionRenderer's RenderState usually rarely set from top of user API, reducing complexity.
Discussion: Alternative was to pass AA-Quality same as SampleCount from the top (e.g. GraphUI Scene), however, this convolutes the API even more. Both parameter modify the resulting shader code in pass2 rendering (only). The used 'renderMode' is still maintained within the Region, since it contains more dynamic states individual to each Region instance (color-texture, ..). This despite 'renderMode' also changes the RenderState's shader program. In the end, it really doesn't matter and is a choice of frequency - the pipeline is usually rendering from on OpenGL rendering thread sequentially. AA-Quality and SampleCount simply usually don't change that often and are set only once.
Diffstat (limited to 'src/jogl/classes/jogamp')
-rw-r--r--src/jogl/classes/jogamp/graph/curve/opengl/VBORegion2PMSAAES2.java40
-rw-r--r--src/jogl/classes/jogamp/graph/curve/opengl/VBORegion2PVBAAES2.java52
-rw-r--r--src/jogl/classes/jogamp/graph/curve/opengl/VBORegionSPES2.java4
3 files changed, 47 insertions, 49 deletions
diff --git a/src/jogl/classes/jogamp/graph/curve/opengl/VBORegion2PMSAAES2.java b/src/jogl/classes/jogamp/graph/curve/opengl/VBORegion2PMSAAES2.java
index e3d2b8629..ae4a734be 100644
--- a/src/jogl/classes/jogamp/graph/curve/opengl/VBORegion2PMSAAES2.java
+++ b/src/jogl/classes/jogamp/graph/curve/opengl/VBORegion2PMSAAES2.java
@@ -176,12 +176,10 @@ public final class VBORegion2PMSAAES2 extends GLRegion {
*
* @param gl
* @param renderer
- * @param renderModes
* @param pass1
- * @param pass2Quality
- * @param sampleCount
+ * @param renderModes
*/
- public void useShaderProgram(final GL2ES2 gl, final RegionRenderer renderer, final int curRenderModes, final boolean pass1, final int pass2Quality, final int sampleCount) {
+ public void useShaderProgram(final GL2ES2 gl, final RegionRenderer renderer, final int curRenderModes, final boolean pass1) {
final boolean isTwoPass = Region.isTwoPass( curRenderModes );
final boolean hasColorChannel = Region.hasColorChannel( curRenderModes );
final boolean hasColorTexture = Region.hasColorTexture( curRenderModes ) && null != colorTexSeq;
@@ -189,7 +187,7 @@ public final class VBORegion2PMSAAES2 extends GLRegion {
final RenderState rs = renderer.getRenderState();
final boolean hasAABBoxClipping = null != rs.getClipBBox() && ( ( !isTwoPass && pass1 ) || ( isTwoPass && !pass1 ) );
- final boolean updateLocGlobal = renderer.useShaderProgram(gl, curRenderModes, pass1, pass2Quality, sampleCount, colorTexSeq);
+ final boolean updateLocGlobal = renderer.useShaderProgram(gl, curRenderModes, pass1, colorTexSeq);
final ShaderProgram sp = renderer.getRenderState().getShaderProgram();
final boolean updateLocLocal;
if( pass1 ) {
@@ -243,7 +241,7 @@ public final class VBORegion2PMSAAES2 extends GLRegion {
private static final int border = 2; // surrounding border, i.e. width += 2*border, height +=2*border
@Override
- protected void drawImpl(final GL2ES2 gl, final RegionRenderer renderer, final int curRenderModes, final int pass2Quality, final int[/*1*/] sampleCount) {
+ protected void drawImpl(final GL2ES2 gl, final RegionRenderer renderer, final int curRenderModes) {
if( 0 >= indicesBuffer.getElemCount() ) {
if(DEBUG_INSTANCE) {
System.err.printf("VBORegion2PMSAAES2.drawImpl: Empty%n");
@@ -259,8 +257,8 @@ public final class VBORegion2PMSAAES2 extends GLRegion {
final RenderState rs = renderer.getRenderState();
final int vpWidth = renderer.getWidth();
final int vpHeight = renderer.getHeight();
- if(vpWidth <=0 || vpHeight <= 0 || sampleCount[0] < 0) {
- useShaderProgram(gl, renderer, curRenderModes, true, pass2Quality, sampleCount[0]);
+ if(vpWidth <=0 || vpHeight <= 0 || rs.getSampleCount() < 0) {
+ useShaderProgram(gl, renderer, curRenderModes, true);
renderRegion(gl, rs, curRenderModes);
} else {
if(0 > maxTexSize[0]) {
@@ -314,7 +312,7 @@ public final class VBORegion2PMSAAES2 extends GLRegion {
winWidth, winHeight, targetWinWidth, targetWinHeight,
diffWinWidth, diffWinHeight, ratioWinWidth, ratioWinHeight,
targetFboWidth, targetFboHeight,
- sampleCount[0]);
+ rs.getSampleCount());
}
}
if( 0 >= targetFboWidth || 0 >= targetFboHeight ) {
@@ -328,7 +326,7 @@ public final class VBORegion2PMSAAES2 extends GLRegion {
System.err.printf("XXX.maxDelta: hasDelta %b: %d / %d, %.3f, %.3f%n",
hasDelta, deltaFboWidth, deltaFboHeight, (float)deltaFboWidth/fboWidth, (float)deltaFboHeight/fboHeight);
System.err.printf("XXX.Scale %d * [%f x %f]: %d x %d%n",
- sampleCount[0], winWidth, winHeight, targetFboWidth, targetFboHeight);
+ rs.getSampleCount(), winWidth, winHeight, targetFboWidth, targetFboHeight);
}
if( hasDelta || fboDirty || isShapeDirty() || null == fbo ) {
// FIXME: rescale
@@ -348,24 +346,24 @@ public final class VBORegion2PMSAAES2 extends GLRegion {
}
gca_FboVerticesAttr.seal(true);
matP.setToOrtho(minX, maxX, minY, maxY, -1, 1);
- useShaderProgram(gl, renderer, curRenderModes, true, pass2Quality, sampleCount[0]);
+ useShaderProgram(gl, renderer, curRenderModes, true);
renderRegion2FBO(gl, rs, curRenderModes,
// (int)drawWinBox.getMinX(), (int)drawWinBox.getMinY(), targetFboWidth, targetFboHeight,
0, 0, targetFboWidth, targetFboHeight,
- vpWidth, vpHeight, sampleCount);
+ vpWidth, vpHeight);
} else if( isStateDirty() ) {
- useShaderProgram(gl, renderer, curRenderModes, true, pass2Quality, sampleCount[0]);
+ useShaderProgram(gl, renderer, curRenderModes, true);
renderRegion2FBO(gl, rs, curRenderModes,
// (int)drawWinBox.getMinX(), (int)drawWinBox.getMinY(), targetFboWidth, targetFboHeight,
0, 0, targetFboWidth, targetFboHeight,
- vpWidth, vpHeight, sampleCount);
+ vpWidth, vpHeight);
}
- useShaderProgram(gl, renderer, curRenderModes, false, pass2Quality, sampleCount[0]);
- renderFBO(gl, rs, vpWidth, vpHeight, sampleCount[0]);
+ useShaderProgram(gl, renderer, curRenderModes, false);
+ renderFBO(gl, rs, vpWidth, vpHeight);
}
}
- private void renderFBO(final GL2ES2 gl, final RenderState rs, final int width, final int height, final int sampleCount) {
+ private void renderFBO(final GL2ES2 gl, final RenderState rs, final int width, final int height) {
gl.glViewport(0, 0, width, height);
if( rs.isHintMaskSet(RenderState.BITHINT_BLENDING_ENABLED | RenderState.BITHINT_GLOBAL_DEPTH_TEST_ENABLED) ) {
@@ -410,12 +408,12 @@ public final class VBORegion2PMSAAES2 extends GLRegion {
private void renderRegion2FBO(final GL2ES2 gl, final RenderState rs, final int curRenderModes,
final int fboX, final int fboY, final int targetFboWidth, final int targetFboHeight,
- final int vpWidth, final int vpHeight, final int[] sampleCount) {
+ final int vpWidth, final int vpHeight) {
if( 0 >= targetFboWidth || 0 >= targetFboHeight ) {
throw new IllegalArgumentException("targetFBOSize "+targetFboWidth+"x"+targetFboHeight+" must be greater than 0");
}
final boolean blendingEnabled = rs.isHintMaskSet(RenderState.BITHINT_BLENDING_ENABLED);
- final int targetFboSamples = sampleCount[0] > 1 ? sampleCount[0] : 0;
+ final int targetFboSamples = rs.getSampleCount() > 1 ? rs.getSampleCount() : 0;
final boolean fboSampleTypeMatch;
{
final int oldSampleCount = null != fbo ? fbo.getNumSamples() : 0;
@@ -430,7 +428,7 @@ public final class VBORegion2PMSAAES2 extends GLRegion {
fboHeight = targetFboHeight;
fbo = new FBObject();
fbo.init(gl, targetFboWidth, targetFboHeight, targetFboSamples);
- sampleCount[0] = Math.max(1, fbo.getNumSamples());
+ rs.setSampleCount( Math.max(1, fbo.getNumSamples()) );
if( 0 == targetFboSamples ) {
texA = fbo.attachTexture2D(gl, 0, true, GL.GL_LINEAR, GL.GL_LINEAR, GL.GL_CLAMP_TO_EDGE, GL.GL_CLAMP_TO_EDGE);
if( !blendingEnabled ) {
@@ -460,7 +458,7 @@ public final class VBORegion2PMSAAES2 extends GLRegion {
}
} else if( targetFboWidth != fboWidth || targetFboHeight != fboHeight || fbo.getNumSamples() != targetFboSamples ) {
fbo.reset(gl, targetFboWidth, targetFboHeight, targetFboSamples);
- sampleCount[0] = Math.max(1, fbo.getNumSamples());
+ rs.setSampleCount( Math.max(1, fbo.getNumSamples()) );
if( DEBUG_FBO_1 ) {
System.err.printf("XXX.resetFBO: %dx%d -> %dx%d%n%s%n", fboWidth, fboHeight, targetFboWidth, targetFboHeight, fbo );
}
diff --git a/src/jogl/classes/jogamp/graph/curve/opengl/VBORegion2PVBAAES2.java b/src/jogl/classes/jogamp/graph/curve/opengl/VBORegion2PVBAAES2.java
index 7c6ea9d3b..bf23f33e9 100644
--- a/src/jogl/classes/jogamp/graph/curve/opengl/VBORegion2PVBAAES2.java
+++ b/src/jogl/classes/jogamp/graph/curve/opengl/VBORegion2PVBAAES2.java
@@ -106,10 +106,8 @@ public final class VBORegion2PVBAAES2 extends GLRegion {
* @param renderer
* @param curRenderModes
* @param pass1
- * @param pass2Quality
- * @param sampleCount
*/
- public void useShaderProgram(final GL2ES2 gl, final RegionRenderer renderer, final int curRenderModes, final boolean pass1, final int pass2Quality, final int sampleCount) {
+ public void useShaderProgram(final GL2ES2 gl, final RegionRenderer renderer, final int curRenderModes, final boolean pass1) {
final boolean isTwoPass = Region.isTwoPass( curRenderModes );
final boolean hasColorChannel = Region.hasColorChannel( curRenderModes );
final boolean hasColorTexture = Region.hasColorTexture( curRenderModes ) && null != colorTexSeq;
@@ -117,7 +115,7 @@ public final class VBORegion2PVBAAES2 extends GLRegion {
final RenderState rs = renderer.getRenderState();
final boolean hasAABBoxClipping = null != rs.getClipBBox() && ( ( !isTwoPass && pass1 ) || ( isTwoPass && !pass1 ) );
- final boolean updateLocGlobal = renderer.useShaderProgram(gl, curRenderModes, pass1, pass2Quality, sampleCount, colorTexSeq);
+ final boolean updateLocGlobal = renderer.useShaderProgram(gl, curRenderModes, pass1, colorTexSeq);
final ShaderProgram sp = renderer.getRenderState().getShaderProgram();
final boolean updateLocLocal;
if( pass1 ) {
@@ -159,7 +157,7 @@ public final class VBORegion2PVBAAES2 extends GLRegion {
}
rsLocal.update(gl, rs, updateLocLocal, curRenderModes, true, false, true);
rs.updateUniformDataLoc(gl, updateLocLocal, false /* updateData */, gcu_FboTexUnit, true); // FIXME always update if changing tex-unit
- rs.updateUniformLoc(gl, updateLocLocal, gcu_FboTexSize, sampleCount > 1); // maybe optimized away for sampleCount <= 1
+ rs.updateUniformLoc(gl, updateLocLocal, gcu_FboTexSize, rs.getSampleCount() > 1); // maybe optimized away for sampleCount <= 1
}
if( hasAABBoxClipping && updateLocLocal ) {
rs.updateUniformLoc(gl, true, gcu_ClipBBox, true);
@@ -249,7 +247,7 @@ public final class VBORegion2PVBAAES2 extends GLRegion {
private static final int border = 2; // surrounding border, i.e. width += 2*border, height +=2*border
@Override
- protected void drawImpl(final GL2ES2 gl, final RegionRenderer renderer, final int curRenderModes, final int pass2Quality, final int[/*1*/] sampleCount) {
+ protected void drawImpl(final GL2ES2 gl, final RegionRenderer renderer, final int curRenderModes) {
if( 0 >= indicesBuffer.getElemCount() ) {
if(DEBUG_INSTANCE) {
System.err.printf("VBORegion2PVBAAES2.drawImpl: Empty%n");
@@ -265,8 +263,9 @@ public final class VBORegion2PVBAAES2 extends GLRegion {
final RenderState rs = renderer.getRenderState();
final int vpWidth = renderer.getWidth();
final int vpHeight = renderer.getHeight();
- if(vpWidth <=0 || vpHeight <= 0 || sampleCount[0] < 0) {
- useShaderProgram(gl, renderer, curRenderModes, true, pass2Quality, sampleCount[0]);
+ int pass2SampleCount = rs.getSampleCount();
+ if(vpWidth <=0 || vpHeight <= 0 || pass2SampleCount < 0) {
+ useShaderProgram(gl, renderer, curRenderModes, true);
renderRegion(gl, rs, curRenderModes);
} else {
if(0 > maxTexSize[0]) {
@@ -303,16 +302,16 @@ public final class VBORegion2PVBAAES2 extends GLRegion {
diffObjBorderWidth = border * ratioObjWinWidth;
diffObjBorderHeight = border * ratioObjWinHeight;
- targetFboWidth = (targetWinWidth+2*border)*sampleCount[0];
- targetFboHeight = (targetWinHeight+2*border)*sampleCount[0];
+ targetFboWidth = (targetWinWidth+2*border)*pass2SampleCount;
+ targetFboHeight = (targetWinHeight+2*border)*pass2SampleCount;
if( DEBUG_FBO_2 ) {
final float ratioWinWidth, ratioWinHeight;
ratioWinWidth = winWidth/targetWinWidth;
ratioWinHeight = winHeight/targetWinHeight;
final float renderFboWidth, renderFboHeight;
- renderFboWidth = (winWidth+2*border)*sampleCount[0];
- renderFboHeight = (winHeight+2*border)*sampleCount[0];
+ renderFboWidth = (winWidth+2*border)*pass2SampleCount;
+ renderFboHeight = (winHeight+2*border)*pass2SampleCount;
final float ratioFboWidth, ratioFboHeight;
ratioFboWidth = renderFboWidth/targetFboWidth;
ratioFboHeight = renderFboHeight/targetFboHeight;
@@ -330,7 +329,7 @@ public final class VBORegion2PVBAAES2 extends GLRegion {
diffWinWidth, diffWinHeight, ratioWinWidth, ratioWinHeight,
renderFboWidth, renderFboHeight, targetFboWidth, targetFboHeight,
diffFboWidth, diffFboHeight, ratioFboWidth, ratioFboHeight,
- sampleCount[0]);
+ pass2SampleCount);
}
}
if( 0 >= targetFboWidth || 0 >= targetFboHeight ) {
@@ -344,27 +343,28 @@ public final class VBORegion2PVBAAES2 extends GLRegion {
System.err.printf("XXX.maxDelta: hasDelta %b: %d / %d, %.3f, %.3f%n",
hasDelta, deltaFboWidth, deltaFboHeight, (float)deltaFboWidth/fboWidth, (float)deltaFboHeight/fboHeight);
System.err.printf("XXX.Scale %d * [%f x %f]: %d x %d%n",
- sampleCount[0], winWidth, winHeight, targetFboWidth, targetFboHeight);
+ pass2SampleCount, winWidth, winHeight, targetFboWidth, targetFboHeight);
}
if( hasDelta || fboDirty || isShapeDirty() || null == fbo ) {
final int maxLength = Math.max(targetFboWidth, targetFboHeight);
if( maxLength > maxTexSize[0] ) {
if( targetFboWidth > targetFboHeight ) {
- sampleCount[0] = (int)Math.floor(maxTexSize[0] / (winWidth+2*border));
+ pass2SampleCount = (int)Math.floor(maxTexSize[0] / (winWidth+2*border));
} else {
- sampleCount[0] = (int)Math.floor(maxTexSize[0] / (winHeight+2*border));
+ pass2SampleCount = (int)Math.floor(maxTexSize[0] / (winHeight+2*border));
}
+ rs.setSampleCount(pass2SampleCount);
final float renderFboWidth, renderFboHeight;
- renderFboWidth = (winWidth+2*border)*sampleCount[0];
- renderFboHeight = (winHeight+2*border)*sampleCount[0];
+ renderFboWidth = (winWidth+2*border)*pass2SampleCount;
+ renderFboHeight = (winHeight+2*border)*pass2SampleCount;
targetFboWidth = (int)Math.ceil(renderFboWidth);
targetFboHeight = (int)Math.ceil(renderFboHeight);
if( DEBUG_FBO_1 ) {
System.err.printf("XXX.Rescale (MAX): win[%.3f, %.3f]: FBO f[%.3f, %.3f], i[%d x %d], msaa %d%n",
winWidth, winHeight,
- renderFboWidth, renderFboHeight, targetFboWidth, targetFboHeight, sampleCount[0]);
+ renderFboWidth, renderFboHeight, targetFboWidth, targetFboHeight, pass2SampleCount);
}
- if( sampleCount[0] <= 0 ) {
+ if( pass2SampleCount <= 0 ) {
// Last way out!
renderRegion(gl, rs, curRenderModes);
return;
@@ -387,20 +387,20 @@ public final class VBORegion2PVBAAES2 extends GLRegion {
}
gca_FboVerticesAttr.seal(true);
matP.setToOrtho(minX, maxX, minY, maxY, -1, 1);
- useShaderProgram(gl, renderer, curRenderModes, true, pass2Quality, sampleCount[0]);
+ useShaderProgram(gl, renderer, curRenderModes, true);
renderRegion2FBO(gl, rs, curRenderModes,
// (int)drawWinBox.getMinX(), (int)drawWinBox.getMinY(), targetFboWidth, targetFboHeight,
0, 0, targetFboWidth, targetFboHeight,
- vpWidth, vpHeight, sampleCount[0]);
+ vpWidth, vpHeight, pass2SampleCount);
} else if( isStateDirty() ) {
- useShaderProgram(gl, renderer, curRenderModes, true, pass2Quality, sampleCount[0]);
+ useShaderProgram(gl, renderer, curRenderModes, true);
renderRegion2FBO(gl, rs, curRenderModes,
// (int)drawWinBox.getMinX(), (int)drawWinBox.getMinY(), targetFboWidth, targetFboHeight,
0, 0, targetFboWidth, targetFboHeight,
- vpWidth, vpHeight, sampleCount[0]);
+ vpWidth, vpHeight, pass2SampleCount);
}
- useShaderProgram(gl, renderer, curRenderModes, false, pass2Quality, sampleCount[0]);
- renderFBO(gl, rs, targetFboWidth, targetFboHeight, vpWidth, vpHeight, sampleCount[0]);
+ useShaderProgram(gl, renderer, curRenderModes, false);
+ renderFBO(gl, rs, targetFboWidth, targetFboHeight, vpWidth, vpHeight, pass2SampleCount);
}
}
diff --git a/src/jogl/classes/jogamp/graph/curve/opengl/VBORegionSPES2.java b/src/jogl/classes/jogamp/graph/curve/opengl/VBORegionSPES2.java
index 80795e8f1..3a568758c 100644
--- a/src/jogl/classes/jogamp/graph/curve/opengl/VBORegionSPES2.java
+++ b/src/jogl/classes/jogamp/graph/curve/opengl/VBORegionSPES2.java
@@ -124,7 +124,7 @@ public final class VBORegionSPES2 extends GLRegion {
final RenderState rs = renderer.getRenderState();
final boolean hasAABBoxClipping = null != rs.getClipBBox();
- final boolean updateLocGlobal = renderer.useShaderProgram(gl, curRenderModes, true, 0 /* pass2Quality */, 0 /* sampleCount */, colorTexSeq);
+ final boolean updateLocGlobal = renderer.useShaderProgram(gl, curRenderModes, true, colorTexSeq);
final ShaderProgram sp = renderer.getRenderState().getShaderProgram();
final boolean updateLocLocal = !sp.equals(spPass1);
spPass1 = sp;
@@ -152,7 +152,7 @@ public final class VBORegionSPES2 extends GLRegion {
@Override
- protected void drawImpl(final GL2ES2 gl, final RegionRenderer renderer, final int curRenderModes, final int pass2Quality, final int[/*1*/] sampleCount) {
+ protected void drawImpl(final GL2ES2 gl, final RegionRenderer renderer, final int curRenderModes) {
// final boolean hasColorChannel = Region.hasColorChannel( curRenderModes );
final boolean hasColorTexture = Region.hasColorTexture( curRenderModes );