diff options
author | Sven Gothel <[email protected]> | 2023-03-07 05:25:07 +0100 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2023-03-07 05:25:07 +0100 |
commit | 8fbb5bb2f4312b52c24375db3055198a18d66319 (patch) | |
tree | 27272b27f4bb81004f5e4a969974e7653d296db7 /src/test/com/jogamp/opengl | |
parent | 14a47f60d2dc7c4f6b2d910fcc8489726443db22 (diff) |
Graph: Bring back passing through temp AffineTransform instances (optional, but recommended)
Diffstat (limited to 'src/test/com/jogamp/opengl')
10 files changed, 51 insertions, 27 deletions
diff --git a/src/test/com/jogamp/opengl/test/junit/graph/PerfTextRendererNEWT00.java b/src/test/com/jogamp/opengl/test/junit/graph/PerfTextRendererNEWT00.java index f8fd06695..44b1f087d 100644 --- a/src/test/com/jogamp/opengl/test/junit/graph/PerfTextRendererNEWT00.java +++ b/src/test/com/jogamp/opengl/test/junit/graph/PerfTextRendererNEWT00.java @@ -259,6 +259,10 @@ public class PerfTextRendererNEWT00 { font.perfCounter().enable(true); } + final AffineTransform translation = new AffineTransform(); + final AffineTransform tmp1 = new AffineTransform(); + final AffineTransform tmp2 = new AffineTransform(); + for(int loop_i=0; loop_i < loop_count; ++loop_i) { final long t2 = Clock.currentNanos(); // all initialized but graph if( null != perf ) { @@ -292,11 +296,10 @@ public class PerfTextRendererNEWT00 { { // all sizes in em final float x_width = font.getAdvanceWidth( font.getGlyphID('X') ); - final AffineTransform t = new AffineTransform(); - t.setToTranslation(3*x_width, 0f); - final AABBox tbox_1 = font.getGlyphBounds(text); - final AABBox rbox_1 = TextRegionUtil.addStringToRegion(region, font, t, text, fg_color); + translation.setToTranslation(3*x_width, 0f); + final AABBox tbox_1 = font.getGlyphBounds(text, tmp1, tmp2); + final AABBox rbox_1 = TextRegionUtil.addStringToRegion(region, font, translation, text, fg_color, tmp1, tmp2); t4 = Clock.currentNanos(); // text added to region if( 0 == loop_i && !do_perf ) { System.err.println("Text_1: tbox "+tbox_1); diff --git a/src/test/com/jogamp/opengl/test/junit/graph/TextRendererGLELBase.java b/src/test/com/jogamp/opengl/test/junit/graph/TextRendererGLELBase.java index f307a1196..21aee7c40 100644 --- a/src/test/com/jogamp/opengl/test/junit/graph/TextRendererGLELBase.java +++ b/src/test/com/jogamp/opengl/test/junit/graph/TextRendererGLELBase.java @@ -43,6 +43,7 @@ import com.jogamp.graph.font.FontFactory; import com.jogamp.graph.font.FontScale; import com.jogamp.graph.font.FontSet; import com.jogamp.graph.geom.SVertex; +import com.jogamp.graph.geom.plane.AffineTransform; import com.jogamp.newt.Window; import com.jogamp.opengl.util.PMVMatrix; @@ -59,6 +60,9 @@ public abstract class TextRendererGLELBase implements GLEventListener { protected RegionRenderer renderer = null; protected TextRegionUtil textRenderUtil = null; + protected final AffineTransform tempT1 = new AffineTransform(); + protected final AffineTransform tempT2 = new AffineTransform(); + /** scale pixel, default is 1f */ protected float pixelScale = 1.0f; @@ -272,9 +276,9 @@ public abstract class TextRendererGLELBase implements GLEventListener { if( cacheRegion ) { textRenderUtil.drawString3D(gl, renderer, font, text, null, vbaaSampleCount); } else if( null != region ) { - TextRegionUtil.drawString3D(gl, region, renderer, font, text, null, vbaaSampleCount); + TextRegionUtil.drawString3D(gl, region, renderer, font, text, null, vbaaSampleCount, tempT1, tempT1); } else { - TextRegionUtil.drawString3D(gl, renderModes, renderer, font, text, null, vbaaSampleCount); + TextRegionUtil.drawString3D(gl, renderModes, renderer, font, text, null, vbaaSampleCount, tempT1, tempT1); } renderer.enable(gl, false); diff --git a/src/test/com/jogamp/opengl/test/junit/graph/demos/GPUTextRendererListenerBase01.java b/src/test/com/jogamp/opengl/test/junit/graph/demos/GPUTextRendererListenerBase01.java index 8fa3744fd..ec179ffdc 100644 --- a/src/test/com/jogamp/opengl/test/junit/graph/demos/GPUTextRendererListenerBase01.java +++ b/src/test/com/jogamp/opengl/test/junit/graph/demos/GPUTextRendererListenerBase01.java @@ -46,6 +46,7 @@ import com.jogamp.graph.font.Font; import com.jogamp.graph.font.FontFactory; import com.jogamp.graph.font.FontScale; import com.jogamp.graph.font.FontSet; +import com.jogamp.graph.geom.plane.AffineTransform; import com.jogamp.newt.Window; import com.jogamp.newt.event.KeyEvent; import com.jogamp.newt.event.KeyListener; @@ -90,6 +91,9 @@ public abstract class GPUTextRendererListenerBase01 extends GPURendererListenerB String headtext; AABBox headbox; + protected final AffineTransform tempT1 = new AffineTransform(); + protected final AffineTransform tempT2 = new AffineTransform(); + static final String text2 = "The quick brown fox jumps over the lazy dog"; public static final String text_help = "JOGAMP graph demo using Resolution Independent NURBS\n"+ @@ -234,15 +238,15 @@ public abstract class GPUTextRendererListenerBase01 extends GPURendererListenerB } else { System.err.println("Using vertical default DPI of "+dpiV+", "+ppmmV+" pixel/mm"); } - fontNameBox = font.getGlyphBounds(fontName); + fontNameBox = font.getGlyphBounds(fontName, tempT1, tempT2); setHeadBox(headType, true); { final float pixelSizeFName = FontScale.toPixels(fontSizeFName, dpiV); System.err.println("XXX: fontName size "+fontSizeFName+"pt, dpiV "+dpiV+" -> "+pixelSizeFName+"px"); System.err.println("XXX: fontName boxM fu "+font.getMetricBoundsFU(fontName)); - System.err.println("XXX: fontName boxG fu "+font.getGlyphBoundsFU(fontName)); + System.err.println("XXX: fontName boxG fu "+font.getGlyphBoundsFU(fontName, tempT1, tempT2)); System.err.println("XXX: fontName boxM em "+font.getMetricBounds(fontName)); - System.err.println("XXX: fontName boxG em "+font.getGlyphBounds(fontName)); + System.err.println("XXX: fontName boxG em "+font.getGlyphBounds(fontName, tempT1, tempT2)); System.err.println("XXX: fontName box height px "+(fontNameBox.getHeight() * pixelSizeFName)); } } @@ -339,7 +343,7 @@ public abstract class GPUTextRendererListenerBase01 extends GPURendererListenerB pmv.glScalef(sxy, sxy, 1.0f); } // No cache, keep region alive! - TextRegionUtil.drawString3D(gl, regionFPS.clear(gl), renderer, font, text, null, sampleCountFPS); + TextRegionUtil.drawString3D(gl, regionFPS.clear(gl), renderer, font, text, null, sampleCountFPS, tempT1, tempT2); pmv.glPopMatrix(); } @@ -393,13 +397,13 @@ public abstract class GPUTextRendererListenerBase01 extends GPURendererListenerB } if(!userInput) { if( bottomTextUseFrustum ) { - TextRegionUtil.drawString3D(gl, regionBottom.clear(gl), renderer, font, text2, null, getSampleCount()); + TextRegionUtil.drawString3D(gl, regionBottom.clear(gl), renderer, font, text2, null, getSampleCount(), tempT1, tempT2); } else { textRegionUtil.drawString3D(gl, renderer, font, text2, null, getSampleCount()); } } else { if( bottomTextUseFrustum ) { - TextRegionUtil.drawString3D(gl, regionBottom.clear(gl), renderer, font, userString.toString(), null, getSampleCount()); + TextRegionUtil.drawString3D(gl, regionBottom.clear(gl), renderer, font, userString.toString(), null, getSampleCount(), tempT1, tempT2); } else { textRegionUtil.drawString3D(gl, renderer, font, userString.toString(), null, getSampleCount()); } diff --git a/src/test/com/jogamp/opengl/test/junit/graph/demos/UIShapeDemo01.java b/src/test/com/jogamp/opengl/test/junit/graph/demos/UIShapeDemo01.java index d09f00000..63c147cdd 100644 --- a/src/test/com/jogamp/opengl/test/junit/graph/demos/UIShapeDemo01.java +++ b/src/test/com/jogamp/opengl/test/junit/graph/demos/UIShapeDemo01.java @@ -56,6 +56,7 @@ import com.jogamp.graph.font.Font; import com.jogamp.graph.font.FontFactory; import com.jogamp.graph.font.FontSet; import com.jogamp.graph.geom.SVertex; +import com.jogamp.graph.geom.plane.AffineTransform; import com.jogamp.newt.Window; import com.jogamp.newt.event.KeyAdapter; import com.jogamp.newt.event.KeyEvent; @@ -167,6 +168,9 @@ public class UIShapeDemo01 implements GLEventListener { boolean ignoreInput = false; + protected final AffineTransform tempT1 = new AffineTransform(); + protected final AffineTransform tempT2 = new AffineTransform(); + public UIShapeDemo01(final Font font, final int renderModes, final RenderState rs, final boolean debug, final boolean trace) { this.font = font; this.renderModes = renderModes; @@ -275,13 +279,13 @@ public class UIShapeDemo01 implements GLEventListener { } full_width_o = objCoord1[0] - objCoord0[0]; } - final AABBox txt_box_em = font.getGlyphBounds(text); + final AABBox txt_box_em = font.getGlyphBounds(text, tempT1, tempT2); final float full_width_s = full_width_o / txt_box_em.getWidth(); final float txt_scale = full_width_s/2f; pmv.glPushMatrix(); pmv.glScalef(txt_scale, txt_scale, 1f); pmv.glTranslatef(-txt_box_em.getWidth(), 0f, 0f); - final AABBox txt_box_r = TextRegionUtil.drawString3D(gl, renderModes, renderer, font, text, new float[] { 0, 0, 0, 1 }, sampleCount); + final AABBox txt_box_r = TextRegionUtil.drawString3D(gl, renderModes, renderer, font, text, new float[] { 0, 0, 0, 1 }, sampleCount, tempT1, tempT2); if( once ) { final AABBox txt_box_em2 = font.getGlyphShapeBounds(null, text); System.err.println("XXX: full_width: "+full_width_o+" / "+txt_box_em.getWidth()+" -> "+full_width_s); diff --git a/src/test/com/jogamp/opengl/test/junit/graph/demos/UITypeDemo01.java b/src/test/com/jogamp/opengl/test/junit/graph/demos/UITypeDemo01.java index 5c638f953..44e014bd8 100644 --- a/src/test/com/jogamp/opengl/test/junit/graph/demos/UITypeDemo01.java +++ b/src/test/com/jogamp/opengl/test/junit/graph/demos/UITypeDemo01.java @@ -62,6 +62,7 @@ import com.jogamp.graph.font.FontFactory; import com.jogamp.graph.font.FontSet; import com.jogamp.graph.font.Font.Glyph; import com.jogamp.graph.geom.SVertex; +import com.jogamp.graph.geom.plane.AffineTransform; import com.jogamp.newt.Window; import com.jogamp.newt.event.KeyAdapter; import com.jogamp.newt.event.KeyEvent; @@ -185,6 +186,9 @@ public class UITypeDemo01 implements GLEventListener { boolean ignoreInput = false; + protected final AffineTransform tempT1 = new AffineTransform(); + protected final AffineTransform tempT2 = new AffineTransform(); + @SuppressWarnings("unused") public UITypeDemo01(final Font font, final int glyph_id, final String text, final int renderModes, final RenderState rs, final boolean debug, final boolean trace) { this.font = font; @@ -341,13 +345,13 @@ public class UITypeDemo01 implements GLEventListener { System.err.println("XXX: txt_box_e2 "+txt_box_em2); } } else if( Glyph.ID_UNKNOWN == glyph_id ) { - final AABBox txt_box_em = font.getGlyphBounds(text); + final AABBox txt_box_em = font.getGlyphBounds(text, tempT1, tempT2); final float full_width_s = full_width_o / txt_box_em.getWidth(); final float full_height_s = full_height_o / txt_box_em.getHeight(); final float txt_scale = full_width_s < full_height_s ? full_width_s/2f : full_height_s/2f; pmv.glScalef(txt_scale, txt_scale, 1f); pmv.glTranslatef(-txt_box_em.getWidth(), 0f, 0f); - final AABBox txt_box_r = TextRegionUtil.drawString3D(gl, renderModes, renderer, font, text, fg_color, sampleCount); + final AABBox txt_box_r = TextRegionUtil.drawString3D(gl, renderModes, renderer, font, text, fg_color, sampleCount, tempT1, tempT2); if( once ) { final AABBox txt_box_em2 = font.getGlyphShapeBounds(null, text); System.err.println("XXX: full_width: "+full_width_o+" / "+txt_box_em.getWidth()+" -> "+full_width_s); diff --git a/src/test/com/jogamp/opengl/test/junit/graph/demos/ui/Label.java b/src/test/com/jogamp/opengl/test/junit/graph/demos/ui/Label.java index d85475451..c4c450763 100644 --- a/src/test/com/jogamp/opengl/test/junit/graph/demos/ui/Label.java +++ b/src/test/com/jogamp/opengl/test/junit/graph/demos/ui/Label.java @@ -97,9 +97,8 @@ public class Label extends UIShape { @Override protected void addShapeToRegion(final GL2ES2 gl, final RegionRenderer renderer) { - final AffineTransform t_sxy = new AffineTransform(); - t_sxy.setToScale(pixelSize, pixelSize); - final AABBox fbox = font.processString(shapeVisitor, t_sxy, text); + tempT1.setToScale(pixelSize, pixelSize); + final AABBox fbox = font.processString(shapeVisitor, tempT1, text, tempT2, tempT3); final float[] ctr = box.getCenter(); setRotationOrigin( ctr[0], ctr[1], ctr[2]); box.resize(fbox); diff --git a/src/test/com/jogamp/opengl/test/junit/graph/demos/ui/Label0.java b/src/test/com/jogamp/opengl/test/junit/graph/demos/ui/Label0.java index 5cf0f9af5..7d8f34261 100644 --- a/src/test/com/jogamp/opengl/test/junit/graph/demos/ui/Label0.java +++ b/src/test/com/jogamp/opengl/test/junit/graph/demos/ui/Label0.java @@ -65,10 +65,12 @@ public class Label0 { this.font = font; } - public final AABBox addShapeToRegion(final float scale, final Region region, final AffineTransform tLeft) { - final AffineTransform t_sxy = new AffineTransform(tLeft); - t_sxy.scale(scale, scale, new AffineTransform()); - return TextRegionUtil.addStringToRegion(region, font, t_sxy, text, rgbaColor); + public final AABBox addShapeToRegion(final float scale, final Region region, final AffineTransform tLeft, + final AffineTransform tmp1, final AffineTransform tmp2, final AffineTransform tmp3) + { + tmp1.setTransform(tLeft); + tmp1.scale(scale, scale, tmp2); + return TextRegionUtil.addStringToRegion(region, font, tmp1, text, rgbaColor, tmp2, tmp3); } @Override diff --git a/src/test/com/jogamp/opengl/test/junit/graph/demos/ui/LabelButton.java b/src/test/com/jogamp/opengl/test/junit/graph/demos/ui/LabelButton.java index 4ea341fba..6a3637e4a 100644 --- a/src/test/com/jogamp/opengl/test/junit/graph/demos/ui/LabelButton.java +++ b/src/test/com/jogamp/opengl/test/junit/graph/demos/ui/LabelButton.java @@ -95,7 +95,7 @@ public class LabelButton extends RoundButton { // Precompute text-box size .. guessing pixelSize final float lw = width * ( 1f - spacingX ) ; final float lh = height * ( 1f - spacingY ) ; - final AABBox lbox0_em = label.font.getGlyphBounds(label.text); + final AABBox lbox0_em = label.font.getGlyphBounds(label.text, tempT1, tempT2); final float lsx = lw / lbox0_em.getWidth(); final float lsy = lh / lbox0_em.getHeight(); final float lScale = lsx < lsy ? lsx : lsy; @@ -117,7 +117,7 @@ public class LabelButton extends RoundButton { System.err.printf ("RIButton: tleft %f / %f, %f / %f%n", ltx[0], ltx[1], ltx[0] * lScale, ltx[1] * lScale); } - final AABBox lbox2 = label.addShapeToRegion(lScale, region, tempT1.setToTranslation(ltx[0], ltx[1])); + final AABBox lbox2 = label.addShapeToRegion(lScale, region, tempT1.setToTranslation(ltx[0], ltx[1]), tempT2, tempT3, tempT4); if( DRAW_DEBUG_BOX ) { System.err.printf("RIButton.X: lbox2 %s%n", lbox2); } diff --git a/src/test/com/jogamp/opengl/test/junit/graph/demos/ui/RoundButton.java b/src/test/com/jogamp/opengl/test/junit/graph/demos/ui/RoundButton.java index 7e096f46c..1f238763d 100644 --- a/src/test/com/jogamp/opengl/test/junit/graph/demos/ui/RoundButton.java +++ b/src/test/com/jogamp/opengl/test/junit/graph/demos/ui/RoundButton.java @@ -41,8 +41,6 @@ public abstract class RoundButton extends UIShape { protected float width; protected float height; protected float corner = DEFAULT_CORNER; - protected final AffineTransform tempT1 = new AffineTransform(); - protected final AffineTransform tempT2 = new AffineTransform(); protected RoundButton(final Factory<? extends Vertex> factory, final int renderModes, final float width, final float height) { super(factory, renderModes); diff --git a/src/test/com/jogamp/opengl/test/junit/graph/demos/ui/UIShape.java b/src/test/com/jogamp/opengl/test/junit/graph/demos/ui/UIShape.java index 22eeec50f..62e6e0753 100644 --- a/src/test/com/jogamp/opengl/test/junit/graph/demos/ui/UIShape.java +++ b/src/test/com/jogamp/opengl/test/junit/graph/demos/ui/UIShape.java @@ -39,6 +39,7 @@ import com.jogamp.graph.curve.opengl.GLRegion; import com.jogamp.graph.curve.opengl.RegionRenderer; import com.jogamp.graph.geom.Vertex; import com.jogamp.graph.geom.Vertex.Factory; +import com.jogamp.graph.geom.plane.AffineTransform; import com.jogamp.newt.event.GestureHandler.GestureEvent; import com.jogamp.newt.event.GestureHandler.GestureListener; import com.jogamp.newt.event.MouseAdapter; @@ -61,6 +62,11 @@ public abstract class UIShape { private final int renderModes; protected final AABBox box; + protected final AffineTransform tempT1 = new AffineTransform(); + protected final AffineTransform tempT2 = new AffineTransform(); + protected final AffineTransform tempT3 = new AffineTransform(); + protected final AffineTransform tempT4 = new AffineTransform(); + protected final float[] translate = new float[] { 0f, 0f, 0f }; protected final Quaternion rotation = new Quaternion(); protected final float[] rotOrigin = new float[] { 0f, 0f, 0f }; |