From 8d598ac75213a7d298b2633bf5d84b215339769e Mon Sep 17 00:00:00 2001
From: Sven Gothel
Date: Wed, 15 Feb 2023 06:58:54 +0100
Subject: Graph: TextRegionUtil: Make addStringToRegion(..) versatile/usable w/
optional AffineTransform (see Label0)
---
.../jogamp/graph/curve/opengl/TextRegionUtil.java | 69 +++++++++++++++-------
1 file changed, 48 insertions(+), 21 deletions(-)
(limited to 'src/jogl')
diff --git a/src/jogl/classes/com/jogamp/graph/curve/opengl/TextRegionUtil.java b/src/jogl/classes/com/jogamp/graph/curve/opengl/TextRegionUtil.java
index 714be1998..fb77775ad 100644
--- a/src/jogl/classes/com/jogamp/graph/curve/opengl/TextRegionUtil.java
+++ b/src/jogl/classes/com/jogamp/graph/curve/opengl/TextRegionUtil.java
@@ -37,8 +37,7 @@ import com.jogamp.opengl.math.geom.AABBox;
import com.jogamp.graph.curve.OutlineShape;
import com.jogamp.graph.curve.Region;
import com.jogamp.graph.font.Font;
-import com.jogamp.graph.geom.Vertex;
-import com.jogamp.graph.geom.Vertex.Factory;
+import com.jogamp.graph.font.Font.Glyph;
import com.jogamp.graph.geom.plane.AffineTransform;
/**
@@ -67,28 +66,53 @@ public class TextRegionUtil {
}
/**
- * Add the string in 3D space w.r.t. the font in font em-size [0..1] at the end of the {@link GLRegion}.
+ * Add the string in 3D space w.r.t. the font in font em-size [0..1] at the end of the {@link GLRegion}
+ * while passing the progressed {@link AffineTransform}.
*
- * The shapes added to the GLRegion are in font em-size [0..1].
+ * The shapes added to the GLRegion are in font em-size [0..1], but can be adjusted with the given transform, progressed and passed to the visitor.
+ *
+ *
+ * Origin of rendered text is 0/0 at bottom left.
+ *
+ * @param region the {@link GLRegion} sink
+ * @param font the target {@link Font}
+ * @param transform optional given transform
+ * @param str string text
+ * @param rgbaColor if {@link Region#hasColorChannel()} RGBA color must be passed, otherwise value is ignored.
+ * @return the bounding box of the given string by taking each glyph's font em-sized [0..1] OutlineShape into account.
+ */
+ public static AABBox addStringToRegion(final Region region, final Font font, final AffineTransform transform,
+ final CharSequence str, final float[] rgbaColor) {
+ return addStringToRegion(region, font, transform, str, rgbaColor, new AffineTransform(), new AffineTransform());
+ }
+
+ /**
+ * Add the string in 3D space w.r.t. the font in font em-size [0..1] at the end of the {@link GLRegion}
+ * while passing the progressed {@link AffineTransform}.
+ *
+ * The shapes added to the GLRegion are in font em-size [0..1], but can be adjusted with the given transform, progressed and passed to the visitor.
+ *
+ *
+ * Origin of rendered text is 0/0 at bottom left.
*
* @param region the {@link GLRegion} sink
- * @param vertexFactory vertex impl factory {@link Factory}
* @param font the target {@link Font}
+ * @param transform optional given transform
* @param str string text
* @param rgbaColor if {@link Region#hasColorChannel()} RGBA color must be passed, otherwise value is ignored.
* @param temp1 temporary AffineTransform storage, mandatory
* @param temp2 temporary AffineTransform storage, mandatory
* @return the bounding box of the given string by taking each glyph's font em-sized [0..1] OutlineShape into account.
*/
- public static AABBox addStringToRegion(final GLRegion region, final Factory extends Vertex> vertexFactory,
- final Font font, final CharSequence str, final float[] rgbaColor,
+ public static AABBox addStringToRegion(final Region region, final Font font, final AffineTransform transform,
+ final CharSequence str, final float[] rgbaColor,
final AffineTransform temp1, final AffineTransform temp2) {
final OutlineShape.Visitor visitor = new OutlineShape.Visitor() {
@Override
public final void visit(final OutlineShape shape, final AffineTransform t) {
region.addOutlineShape(shape, t, region.hasColorChannel() ? rgbaColor : null);
} };
- return font.processString(visitor, null, str, temp1, temp2);
+ return font.processString(visitor, transform, str, temp1, temp2);
}
/**
@@ -97,6 +121,9 @@ public class TextRegionUtil {
* The shapes added to the GLRegion are in font em-size [0..1].
*
*
+ * Origin of rendered text is 0/0 at bottom left.
+ *
+ *
* Cached {@link GLRegion}s will be destroyed w/ {@link #clear(GL2ES2)} or to free memory.
*
* @param gl the current GL state
@@ -117,13 +144,15 @@ public class TextRegionUtil {
}
final int special = 0;
GLRegion region = getCachedRegion(font, str, special);
+ AABBox res;
if(null == region) {
region = GLRegion.create(renderModes, null);
- addStringToRegion(region, renderer.getRenderState().getVertexFactory(), font, str, rgbaColor, tempT1, tempT2);
+ res = addStringToRegion(region, font, null, str, rgbaColor, tempT1, tempT2);
addCachedRegion(gl, font, str, special, region);
+ } else {
+ res = new AABBox();
+ res.copy(region.getBounds());
}
- final AABBox res = new AABBox();
- res.copy(region.getBounds());
region.draw(gl, renderer, sampleCount);
return res;
}
@@ -134,6 +163,9 @@ public class TextRegionUtil {
* The shapes added to the GLRegion are in font em-size [0..1].
*
*
+ * Origin of rendered text is 0/0 at bottom left.
+ *
+ *
* In case of a multisampling region renderer, i.e. {@link Region#VBAA_RENDERING_BIT}, recreating the {@link GLRegion}
* is a huge performance impact.
* In such case better use {@link #drawString3D(GL2ES2, GLRegion, RegionRenderer, Font, CharSequence, float[], int[])}
@@ -155,12 +187,8 @@ public class TextRegionUtil {
if(!renderer.isInitialized()){
throw new GLException("TextRendererImpl01: not initialized!");
}
- final AffineTransform temp1 = new AffineTransform();
- final AffineTransform temp2 = new AffineTransform();
final GLRegion region = GLRegion.create(renderModes, null);
- addStringToRegion(region, renderer.getRenderState().getVertexFactory(), font, str, rgbaColor, temp1, temp2);
- final AABBox res = new AABBox();
- res.copy(region.getBounds());
+ final AABBox res = addStringToRegion(region, font, null, str, rgbaColor);
region.draw(gl, renderer, sampleCount);
region.destroy(gl);
return res;
@@ -172,6 +200,9 @@ public class TextRegionUtil {
*
* The shapes added to the GLRegion are in font em-size [0..1].
*
+ *
+ * Origin of rendered text is 0/0 at bottom left.
+ *
* @param gl the current GL state
* @param font {@link Font} to be used
* @param str text to be rendered
@@ -187,12 +218,8 @@ public class TextRegionUtil {
if(!renderer.isInitialized()){
throw new GLException("TextRendererImpl01: not initialized!");
}
- final AffineTransform temp1 = new AffineTransform();
- final AffineTransform temp2 = new AffineTransform();
region.clear(gl);
- addStringToRegion(region, renderer.getRenderState().getVertexFactory(), font, str, rgbaColor, temp1, temp2);
- final AABBox res = new AABBox();
- res.copy(region.getBounds());
+ final AABBox res = addStringToRegion(region, font, null, str, rgbaColor);
region.draw(gl, renderer, sampleCount);
return res;
}
--
cgit v1.2.3