From e9a0f5cdc2bca9ca97175d2fa3c1b722a574b267 Mon Sep 17 00:00:00 2001
From: Sven Gothel In case {@link Region#VBAA_RENDERING_BIT} is being requested the default texture unit
+ * {@link Region#DEFAULT_TWO_PASS_TEXTURE_UNIT} is being used.
* Cached {@link GLRegion}s will be destroyed w/ {@link #clear(GL2ES2)} or to free memory.
*
+ * The region's buffer size is pre-calculated via {@link GLRegion#create(com.jogamp.opengl.GLProfile, int, com.jogamp.opengl.util.texture.TextureSequence, Font, CharSequence)}
+ *
+ * The region's buffer size is pre-calculated via {@link GLRegion#create(com.jogamp.opengl.GLProfile, int, com.jogamp.opengl.util.texture.TextureSequence, Font, CharSequence)}
+ *
+ * The region's buffer size is pre-calculated via {@link GLRegion#create(com.jogamp.opengl.GLProfile, int, com.jogamp.opengl.util.texture.TextureSequence, Font, CharSequence)} + *
+ ** 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[], AffineTransform, AffineTransform)} @@ -217,7 +227,7 @@ public class TextRegionUtil { if(!renderer.isInitialized()){ throw new GLException("TextRendererImpl01: not initialized!"); } - final GLRegion region = GLRegion.create(gl.getGLProfile(), renderModes, null); + final GLRegion region = GLRegion.create(gl.getGLProfile(), renderModes, null, font, str); final AABBox res = addStringToRegion(region, font, null, str, rgbaColor, tmp1, tmp2); region.draw(gl, renderer, sampleCount); region.destroy(gl); @@ -226,6 +236,9 @@ public class TextRegionUtil { /** * Try using {@link #drawString3D(GL2ES2, GLRegion, RegionRenderer, Font, CharSequence, float[], int[], AffineTransform, AffineTransform)} to reuse {@link AffineTransform} instances. + *
+ * The region's buffer size is pre-calculated via {@link #countStringRegion(Region, Font, CharSequence, int[])}. + *
*/ public static AABBox drawString3D(final GL2ES2 gl, final GLRegion region, final RegionRenderer renderer, final Font font, final CharSequence str, final float[] rgbaColor, final int[/*1*/] sampleCount) { @@ -243,6 +256,9 @@ public class TextRegionUtil { ** Origin of rendered text is 0/0 at bottom left. *
+ *+ * The region's buffer size is pre-calculated via {@link #countStringRegion(Region, Font, CharSequence, int[])}. + *
* @param gl the current GL state * @param region * @param renderer @@ -262,6 +278,9 @@ public class TextRegionUtil { if(!renderer.isInitialized()){ throw new GLException("TextRendererImpl01: not initialized!"); } + final int[] vertIndCount = { 0, 0 }; + TextRegionUtil.countStringRegion(region, font, str, vertIndCount); + region.growBuffer(vertIndCount[0], vertIndCount[1]); final AABBox res = addStringToRegion(region, font, null, str, rgbaColor, tmp1, tmp2); region.draw(gl, renderer, sampleCount); return res; 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 e31ed7ae3..1b6109af7 100644 --- a/src/test/com/jogamp/opengl/test/junit/graph/PerfTextRendererNEWT00.java +++ b/src/test/com/jogamp/opengl/test/junit/graph/PerfTextRendererNEWT00.java @@ -245,24 +245,8 @@ public class PerfTextRendererNEWT00 { final RegionRenderer renderer = RegionRenderer.create(rs, RegionRenderer.defaultBlendEnable, RegionRenderer.defaultBlendDisable); rs.setHintMask(RenderState.BITHINT_GLOBAL_DEPTH_TEST_ENABLED); - // Since we know about the size ... - // final GLRegion region = GLRegion.create(gl.getGLProfile(), renderModes, null); - // region.growBufferSize(123000, 62000); // hack-me - // FreeSans ~ vertices 68/char, indices 36/char - // Ubuntu Light ~ vertices 100/char, indices 50/char - // FreeSerif ~ vertices 115/char, indices 61/char - // final int vertices_per_char = 68; // 100; - // final int indices_per_char = 36; // 50; - // final GLRegion region = GLRegion.create(gl.getGLProfile(), renderModes, null, text.length()*vertices_per_char, text.length()*indices_per_char); - final GLRegion region = GLRegion.create(gl.getGLProfile(), renderModes, null); - System.err.println("Region post ctor w/ default initial buffer size"); - region.printBufferStats(System.err); - - final int[] verticesIndicesCount = new int[] { 0, 0 }; - TextRegionUtil.countStringRegion(region, font, text, verticesIndicesCount); - System.err.println("Region count: text "+text.length()+" chars -> vertices "+verticesIndicesCount[0]+", indices "+verticesIndicesCount[1]); - region.setBufferCapacity(verticesIndicesCount[0], verticesIndicesCount[1]); - System.err.println("Region post set-buffer-size w/ matching vertices "+verticesIndicesCount[0]+", indices "+verticesIndicesCount[1]); + final GLRegion region = GLRegion.create(gl.getGLProfile(), renderModes, null, font, text); + System.err.println("Region post ctor w/ pre-calculated buffer size"); region.printBufferStats(System.err); final Perf perf = new Perf(); 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 7a83501c6..b867c054e 100644 --- a/src/test/com/jogamp/opengl/test/junit/graph/TextRendererGLELBase.java +++ b/src/test/com/jogamp/opengl/test/junit/graph/TextRendererGLELBase.java @@ -276,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, tempT1, tempT1); + TextRegionUtil.drawString3D(gl, region, renderer, font, text, null, vbaaSampleCount, tempT1, tempT2); } else { - TextRegionUtil.drawString3D(gl, renderModes, renderer, font, text, null, vbaaSampleCount, tempT1, tempT1); + TextRegionUtil.drawString3D(gl, renderModes, renderer, font, text, null, vbaaSampleCount, tempT1, tempT2); } renderer.enable(gl, false); -- cgit v1.2.3