From 3336d930e991679eadaa1ff4068cb8d23562b42c Mon Sep 17 00:00:00 2001 From: Sven Göthel Date: Tue, 16 Jan 2024 08:05:27 +0100 Subject: GraphUI Enhance Clipping: Drop 'cullingScale' param, a simple intersection-test against 'clipBox' to discard whole shapes if completely outside is enough. Commit f06fe57b0ae738870a61700ff2c65680102d9e73 turns out addition of using `clipbBox*cullingScale` for the AABBox contains test was not required to render the new Glyphs in the FontView01 demo 'in time'. A simple intersection-test against 'clipBox' to discard shapes if completely outside is enough, hence dropping the 'cullingScale' parameter - simplifying. --- src/graphui/classes/com/jogamp/graph/ui/Group.java | 26 +++++++--------------- .../com/jogamp/graph/ui/widgets/RangedGroup.java | 13 +++-------- 2 files changed, 11 insertions(+), 28 deletions(-) (limited to 'src/graphui/classes/com/jogamp/graph/ui') diff --git a/src/graphui/classes/com/jogamp/graph/ui/Group.java b/src/graphui/classes/com/jogamp/graph/ui/Group.java index a4451501a..be34ecf3b 100644 --- a/src/graphui/classes/com/jogamp/graph/ui/Group.java +++ b/src/graphui/classes/com/jogamp/graph/ui/Group.java @@ -85,7 +85,6 @@ public class Group extends Shape implements Container { private boolean widgetMode = false; private boolean clipOnBounds = false; private AABBox clipBBox = null; - private final Vec3f clipCullingScale = new Vec3f(); /** * Create a group of {@link Shape}s w/o {@link Group.Layout}. @@ -126,40 +125,34 @@ public class Group extends Shape implements Container { /** * Enable {@link AABBox} clipping on {@link #getBounds()} for this group and its shapes as follows * *

* {@link #setClipBBox(AABBox)} takes precedence over {@link #setClipOnBounds(boolean)}. *

* @param v boolean to toggle clipping - * @param cullingScale culling scale factor per axis for the {@code clip-box} to discard {@link #draw(GL2ES2, RegionRenderer) rendering} completely, - * should be {@code >= 1} for each axis. * @return this instance for chaining * @see #setClipBBox(AABBox) */ - public Group setClipOnBounds(final boolean v, final Vec3f cullingScale) { clipOnBounds = v; clipCullingScale.set(cullingScale); return this; } + public Group setClipOnBounds(final boolean v) { clipOnBounds = v; return this; } /** Returns {@link #setClipOnBounds(boolean)} value */ public boolean getClipOnBounds() { return clipOnBounds; } /** * Enable {@link AABBox} clipping on explicit given pre-multiplied Mv-matrix {@code clip-box} as follows * *

* {@link #setClipBBox(AABBox)} takes precedence over {@link #setClipOnBounds(boolean)}. *

* @param v {@link AABBox} pre-multiplied Mv-matrix - * @param cullingScale culling scale factor per axis for the {@code clip-box} to discard {@link #draw(GL2ES2, RegionRenderer) rendering} completely, - * should be {@code >= 1} for each axis. * @return this instance for chaining * @see #setClipOnBounds(boolean) */ - public Group setClipBBox(final AABBox v, final Vec3f cullingScale) { clipBBox = v; clipCullingScale.set(cullingScale); return this; } + public Group setClipBBox(final AABBox v) { clipBBox = v; return this; } /** Returns {@link #setClipBBox(AABBox)} value */ public AABBox getClipBBox() { return clipBBox; } @@ -293,10 +286,7 @@ public class Group extends Shape implements Container { final AABBox origClipBox = renderer.getClipBBox(); final AABBox clipBox = useClipBBox ? clipBBox : box.transform(pmv.getMv(), tempBB0); - if( clipCullingScale.x() > 1f || clipCullingScale.y() > 1f || clipCullingScale.z() > 1f) { - renderer.setClipBBox( tempBB1.set(clipBox) ); // Mv pre-multiplied AABBox - } // else clip-box >= 'clip-box*cullingScale' for all axis, no pixel-accurate clipping is performed as shapes are culled before - clipBox.scale(clipCullingScale.x(), clipCullingScale.y(), clipCullingScale.z()); + renderer.setClipBBox( tempBB1.set(clipBox) ); // Mv pre-multiplied AABBox final int shapeCount = shapesS.length; for(int i=0; i 1. - * See {@link Group#setClipBBox(AABBox, Vec3f)}. * @param horizSliderParam optional horizontal slider parameters, null for none * @param vertSliderParam optional vertical slider parameters, null for none */ - public RangedGroup(final int renderModes, final Group content, final Vec2f contentSize, final Vec3f cullingScale, + public RangedGroup(final int renderModes, final Group content, final Vec2f contentSize, final SliderParam horizSliderParam, final SliderParam vertSliderParam) { super( new GridLayout(1 + (null != vertSliderParam ? 1 : 0), 0f, 0f, Alignment.None)); // vertical slider adds to the right column @@ -101,7 +96,6 @@ public class RangedGroup extends Widget { this.clippedContent.setFixedSize(contentSize); this.clippedContent.addShape(content); addShape(clippedContent); - clipCullingScale = cullingScale; if( null != horizSliderParam ) { horizSlider = new RangeSlider(renderModes, horizSliderParam.size, @@ -141,7 +135,6 @@ public class RangedGroup extends Widget { public Group getContent() { return content; } public Vec2f getContentSize() { return clippedContent.getFixedSize(); } - public Vec3f getClipCullingScale() { return clipCullingScale; } public Group getClippedContent() { return clippedContent; } public RangeSlider getHorizSlider() { return horizSlider; } public RangeSlider getVertSlider() { return vertSlider; } @@ -173,9 +166,9 @@ public class RangedGroup extends Widget { if( content.isVisible() ) { // Mv pre-multiplied AABBox, clippedContent is on same PMV final AABBox clipBBox = clippedContent.getBounds().transform(renderer.getMatrix().getMv(), tempBB); - content.setClipBBox(clipBBox, clipCullingScale); + content.setClipBBox(clipBBox); super.drawImpl0(gl, renderer, rgba); - content.setClipBBox(null, clipCullingScale); + content.setClipBBox(null); } } private final AABBox tempBB = new AABBox(); // OK, synchronized -- cgit v1.2.3