diff options
author | Sven Gothel <[email protected]> | 2023-02-19 17:45:08 +0100 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2023-02-19 17:45:08 +0100 |
commit | 6bf76cfc2dcba22d377346f132b5e90b92dc192c (patch) | |
tree | cfea719818e4fe1180c75114d7c15de93265a08e /src/test/com | |
parent | 4f7d133b7f7c06f35d75cb46d5e13aa215fee52d (diff) |
Graph: Update demos ..
Diffstat (limited to 'src/test/com')
6 files changed, 177 insertions, 120 deletions
diff --git a/src/test/com/jogamp/opengl/test/junit/graph/TestTextRendererNEWT00.java b/src/test/com/jogamp/opengl/test/junit/graph/TestTextRendererNEWT00.java index 07798e2ee..a3733022f 100644 --- a/src/test/com/jogamp/opengl/test/junit/graph/TestTextRendererNEWT00.java +++ b/src/test/com/jogamp/opengl/test/junit/graph/TestTextRendererNEWT00.java @@ -53,8 +53,9 @@ import com.jogamp.graph.curve.opengl.RegionRenderer; import com.jogamp.graph.curve.opengl.TextRegionUtil; 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.SVertex; +import com.jogamp.graph.geom.plane.AffineTransform; import com.jogamp.opengl.math.geom.AABBox; import com.jogamp.opengl.test.junit.util.MiscUtils; import com.jogamp.opengl.test.junit.util.NEWTGLContext; @@ -65,9 +66,12 @@ import com.jogamp.opengl.util.PMVMatrix; /** * TestTextRendererNEWT00 Variant + * - Testing GLRegion properties, i.e. overflow bug * - No listener, all straight forward - * - Type Rendering via TextRegionUtil - * - Type Rendering vanilla via GLRegion, GLRegion.addOutlineShape(Font.processString()), .. + * - Type Rendering vanilla via TextRegionUtil.addStringToRegion(..) + * - GLRegion.addOutlineShape( Font.processString(..) ) + * - Using a single GLRegion instantiation + * - Single GLRegion is filled once with shapes from text */ @FixMethodOrder(MethodSorters.NAME_ASCENDING) public class TestTextRendererNEWT00 extends UITestCase { @@ -78,16 +82,17 @@ public class TestTextRendererNEWT00 extends UITestCase { static boolean forceGL3 = false; static boolean mainRun = false; static boolean useMSAA = true; - static int win_width = 1024; - static int win_height = 640; + static int win_width = 1280; + static int win_height = 720; static Font font; static float fontSize = 24; // in pixel + private final float[] fg_color = new float[] { 0, 0, 0, 1 }; @BeforeClass public static void setup() throws IOException { if( null == font ) { - font = FontFactory.get(FontFactory.UBUNTU).getDefault(); + font = FontFactory.get(FontFactory.UBUNTU).get(FontSet.FAMILY_LIGHT, FontSet.STYLE_NONE); } } @@ -136,7 +141,7 @@ public class TestTextRendererNEWT00 extends UITestCase { @Test public void test02TextRendererVBAA04() throws InterruptedException, GLException, IOException { - final int renderModes = Region.VBAA_RENDERING_BIT; + final int renderModes = Region.VBAA_RENDERING_BIT | Region.COLORCHANNEL_RENDERING_BIT; final int sampleCount = 4; final GLProfile glp; if(forceGL3) { @@ -163,115 +168,122 @@ public class TestTextRendererNEWT00 extends UITestCase { final RenderState rs = RenderState.createRenderState(SVertex.factory()); final RegionRenderer renderer = RegionRenderer.create(rs, RegionRenderer.defaultBlendEnable, RegionRenderer.defaultBlendDisable); rs.setHintMask(RenderState.BITHINT_GLOBAL_DEPTH_TEST_ENABLED); - final TextRegionUtil textRenderUtil = new TextRegionUtil(renderModes); // init gl.glClearColor(1.0f, 1.0f, 1.0f, 1.0f); renderer.init(gl, 0); rs.setColorStatic(0.1f, 0.1f, 0.1f, 1.0f); - screenshot = new GLReadBufferUtil(false, false); + final GLReadBufferUtil screenshot = new GLReadBufferUtil(false, false); // reshape gl.glViewport(0, 0, drawable.getSurfaceWidth(), drawable.getSurfaceHeight()); // renderer.reshapePerspective(gl, 45.0f, drawable.getWidth(), drawable.getHeight(), 0.1f, 1000.0f); renderer.reshapeOrtho(drawable.getSurfaceWidth(), drawable.getSurfaceHeight(), 0.1f, 1000.0f); + final int z0 = -1000; final int[] sampleCountIO = { sampleCount }; // display gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); + + final GLRegion region = GLRegion.create(renderModes, null); + final float dx = 0; + final float dy = drawable.getSurfaceHeight() - 3 * fontSize * font.getLineHeight(); { - { - final float[] pixelsPerMM = winctx.window.getPixelsPerMM(new float[2]); - final float[] dpi = FontScale.ppmmToPPI(pixelsPerMM, new float[2]); - final float mmSize = fontSize / pixelsPerMM[1]; - final int unitsPerEM = font.getMetrics().getUnitsPerEM(); - String txt = String.format("Resolution dpiV %.2f, %.2f px/mm", dpi[1], pixelsPerMM[1]); - renderString(drawable, gl, renderer, textRenderUtil, txt, 0, 0, -1000, sampleCountIO); - txt = String.format("Font %s, unitsPerEM %d, size %.2f px %2f mm", font.getFullFamilyName(), unitsPerEM, fontSize, mmSize); - renderString(drawable, gl, renderer, textRenderUtil, txt, 0, -1, -1000, sampleCountIO); - } - { - final AABBox txt_box_em = glyph.getBBox(); - 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.glPushMatrix(); - pmv.glScalef(txt_scale, txt_scale, 1f); - pmv.glTranslatef(-txt_box_em.getWidth(), 0f, 0f); - { - final GLRegion region = GLRegion.create(renderModes, null); - region.addOutlineShape(glyph.getShape(), null, region.hasColorChannel() ? fg_color : null); - region.draw(gl, renderer, sampleCount); - region.destroy(gl); - } - 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); - System.err.println("XXX: full_height: "+full_height_o+" / "+txt_box_em.getHeight()+" -> "+full_height_s); - System.err.println("XXX: txt_scale: "+txt_scale); - System.err.println("XXX: txt_box_em "+txt_box_em); - System.err.println("XXX: txt_box_e2 "+txt_box_em2); - once = false; - } + // 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_1); + final AABBox rbox_1 = TextRegionUtil.addStringToRegion(region, font, t, text_1, fg_color); + System.err.println("Text_1: tbox "+tbox_1); + System.err.println("Text_1: rbox "+rbox_1); + + if( true ) { + t.setToTranslation(3*x_width, -1f*(rbox_1.getHeight()+font.getLineHeight())); + final AABBox tbox_2 = font.getGlyphBounds(text_2); + final AABBox rbox_2 = TextRegionUtil.addStringToRegion(region, font, t, text_2, fg_color); + System.err.println("Text_1: tbox "+tbox_2); + System.err.println("Text_1: rbox "+rbox_2); } - renderString(drawable, gl, renderer, textRenderUtil, "012345678901234567890123456789", 0, -1, -1000, sampleCountIO); - renderString(drawable, gl, renderer, textRenderUtil, "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", 0, -1, -1000, sampleCountIO); - renderString(drawable, gl, renderer, textRenderUtil, "Hello World", 0, -1, -1000, sampleCountIO); - renderString(drawable, gl, renderer, textRenderUtil, "4567890123456", 4, -1, -1000,sampleCountIO); - renderString(drawable, gl, renderer, textRenderUtil, "I like JogAmp", 4, -1, -1000, sampleCountIO); - - int c = 0; - renderString(drawable, gl, renderer, textRenderUtil, "GlueGen", c++, -1, -1000, sampleCountIO); - renderString(drawable, gl, renderer, textRenderUtil, "JOAL", c++, -1, -1000, sampleCountIO); - renderString(drawable, gl, renderer, textRenderUtil, "JOGL", c++, -1, -1000, sampleCountIO); - renderString(drawable, gl, renderer, textRenderUtil, "JOCL", c++, -1, -1000, sampleCountIO); } + + final PMVMatrix pmv = renderer.getMatrix(); + pmv.glMatrixMode(GLMatrixFunc.GL_MODELVIEW); + pmv.glLoadIdentity(); + pmv.glTranslatef(dx, dy, z0); + pmv.glScalef(fontSize, fontSize, 1f); + region.draw(gl, renderer, sampleCountIO); gl.glFinish(); - printScreen(renderModes, drawable, gl, false, sampleCount); + printScreen(screenshot, renderModes, drawable, gl, false, sampleCount); drawable.swapBuffers(); sleep(); // dispose + region.destroy(gl);; screenshot.dispose(gl); renderer.destroy(gl); NEWTGLContext.destroyWindow(winctx); } - private boolean once = true; - - private GLReadBufferUtil screenshot; - int lastRow = -1; - - void renderString(final GLDrawable drawable, final GL2ES2 gl, final RegionRenderer renderer, final TextRegionUtil textRenderUtil, final String text, final int column, int row, final int z0, final int[] sampleCount) { - final int height = drawable.getSurfaceHeight(); - - float dx = 0; - float dy = height; - if(0>row) { - row = lastRow + 1; - } - final AABBox textBox = font.getMetricBounds(text); // em-size - dx += fontSize * font.getAdvanceWidth('X') * column; - dy -= fontSize * textBox.getHeight() * ( row + 1 ); - - final PMVMatrix pmv = renderer.getMatrix(); - pmv.glMatrixMode(GLMatrixFunc.GL_MODELVIEW); - pmv.glLoadIdentity(); - pmv.glTranslatef(dx, dy, z0); - pmv.glScalef(fontSize, fontSize, 1.0f); - textRenderUtil.drawString3D(gl, renderer, font, text, null, sampleCount); - - lastRow = row; - } - - private int screenshot_num = 0; - - public void printScreen(final int renderModes, final GLDrawable drawable, final GL gl, final boolean exportAlpha, final int sampleCount) throws GLException, IOException { + public static final String text_1 = + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec nec sapien tellus. \n"+ + "Ut purus odio, rhoncus sit amet commodo eget, ullamcorper vel urna. Mauris ultricies \n"+ + "quam iaculis urna cursus ornare. Nullam ut felis a ante ultrices ultricies nec a elit. \n"+ + "In hac habitasse platea dictumst. Vivamus et mi a quam lacinia pharetra at venenatis est. \n"+ + "Morbi quis bibendum nibh. Donec lectus orci, sagittis in consequat nec, volutpat nec nisi. \n"+ + "Donec ut dolor et nulla tristique varius. In nulla magna, fermentum id tempus quis, semper \n"+ + "in lorem. Maecenas in ipsum ac justo scelerisque sollicitudin. Quisque sit amet neque lorem, \n" + + "I “Ask Jeff” or ‘Ask Jeff’. Take the chef d’œuvre! Two of [of] (of) ‘of’ “of” of? of! of*. X\n"+ + "Les Woëvres, the Fôret de Wœvres, the Voire and Vauvise. Yves is in heaven; D’Amboise is in jail. X\n"+ + "Lyford’s in Texas & L’Anse-aux-Griffons in Québec; the Łyna in Poland. Yriarte, Yciar and Ysaÿe are at Yale. X\n"+ + "Kyoto and Ryotsu are both in Japan, Kwikpak on the Yukon delta, Kvæven in Norway, Kyulu in Kenya, not in Rwanda.… X\n"+ + "Von-Vincke-Straße in Münster, Vdovino in Russia, Ytterbium in the periodic table. Are Toussaint L’Ouverture, Wölfflin, Wolfe, X\n"+ + "Miłosz and Wū Wŭ all in the library? 1510–1620, 11:00 pm, and the 1980s are over. X\n"+ + "-------Press H to change text---------"; + + public static final String text_1b = + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec nec sapien tellus. \n"+ + "Ut purus odio, rhoncus sit amet commodo eget, ullamcorper vel urna. Mauris ultricies \n"+ + "quam iaculis urna cursus ornare. Nullam ut felis a ante ultrices ultricies nec a elit. \n"+ + "In hac habitasse platea dictumst. Vivamus et mi a quam lacinia pharetra at venenatis est. \n"+ + "Morbi quis bibendum nibh. Donec lectus orci, sagittis in consequat nec, volutpat nec nisi. \n"+ + "Donec ut dolor et nulla tristique varius. In nulla magna, fermentum id tempus quis, semper \n"+ + "in lorem. Maecenas in ipsum ac justo scelerisque sollicitudin. Quisque sit amet neque lorem, \n" + + "I “Ask Jeff” or ‘Ask Jeff’. Take the chef d’œuvre! Two of"+ + "abcdefh"; + // ^ + // | + //"abcdefgh"; + // ^ + // | + + public static final String text_1o = + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec nec sapien tellus. \n"+ + "Ut purus odio, rhoncus sit amet commodo eget, ullamcorper vel urna. Mauris ultricies \n"+ + "quam iaculis urna cursus ornare. Nullam ut felis a ante ultrices ultricies nec a elit. \n"+ + "In hac habitasse platea dictumst. Vivamus et mi a quam lacinia pharetra at venenatis est. \n"+ + "Morbi quis bibendum nibh. Donec lectus orci, sagittis in consequat nec, volutpat nec nisi. \n"+ + "Donec ut dolor et nulla tristique varius. In nulla magna, fermentum id tempus quis, semper \n"+ + "in lorem. Maecenas in ipsum ac justo scelerisque sollicitudin. Quisque sit amet neque lorem, \n" + + "-------Press H to change text---------"; + + public static final String text_2 = + "I “Ask Jeff” or ‘Ask Jeff’. Take the chef d’œuvre! Two of [of] (of) ‘of’ “of” of? of! of*. X\n"+ + "Les Woëvres, the Fôret de Wœvres, the Voire and Vauvise. Yves is in heaven; D’Amboise is in jail. X\n"+ + "Lyford’s in Texas & L’Anse-aux-Griffons in Québec; the Łyna in Poland. Yriarte, Yciar and Ysaÿe are at Yale. X\n"+ + "Kyoto and Ryotsu are both in Japan, Kwikpak on the Yukon delta, Kvæven in Norway, Kyulu in Kenya, not in Rwanda.… X\n"+ + "Von-Vincke-Straße in Münster, Vdovino in Russia, Ytterbium in the periodic table. Are Toussaint L’Ouverture, Wölfflin, Wolfe, X\n"+ + "Miłosz and Wū Wŭ all in the library? 1510–1620, 11:00 pm, and the 1980s are over. X\n"+ + "-------Press H to change text---------"; + + public static void printScreen(final GLReadBufferUtil screenshot, final int renderModes, final GLDrawable drawable, final GL gl, final boolean exportAlpha, final int sampleCount) throws GLException, IOException { + final int screenshot_num = 0; final String dir = "./"; - final String objName = getSimpleTestName(".")+"-snap"+screenshot_num; - screenshot_num++; + final String objName = "TestTextRendererNEWT00-snap"+screenshot_num; + // screenshot_num++; final String modeS = Region.getRenderModeString(renderModes); final String bname = String.format((Locale)null, "%s-msaa%02d-fontsz%02.1f-%03dx%03d-%s%04d", objName, drawable.getChosenGLCapabilities().getNumSamples(), diff --git a/src/test/com/jogamp/opengl/test/junit/graph/TestTextRendererNEWT01.java b/src/test/com/jogamp/opengl/test/junit/graph/TestTextRendererNEWT01.java index eb6a61bec..c01619262 100644 --- a/src/test/com/jogamp/opengl/test/junit/graph/TestTextRendererNEWT01.java +++ b/src/test/com/jogamp/opengl/test/junit/graph/TestTextRendererNEWT01.java @@ -53,6 +53,7 @@ import com.jogamp.graph.curve.opengl.TextRegionUtil; 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.SVertex; import com.jogamp.opengl.math.geom.AABBox; import com.jogamp.opengl.test.junit.util.MiscUtils; @@ -86,8 +87,7 @@ public class TestTextRendererNEWT01 extends UITestCase { @BeforeClass public static void setup() throws IOException { if( null == font ) { - font = FontFactory.get(FontFactory.UBUNTU).getDefault(); - // font = FontFactory.get(FontFactory.JAVA).getDefault(); + font = FontFactory.get(FontFactory.UBUNTU).get(FontSet.FAMILY_LIGHT, FontSet.STYLE_NONE); } } @@ -195,6 +195,7 @@ public class TestTextRendererNEWT01 extends UITestCase { // renderer.reshapePerspective(gl, 45.0f, drawable.getWidth(), drawable.getHeight(), 0.1f, 1000.0f); renderer.reshapeOrtho(drawable.getSurfaceWidth(), drawable.getSurfaceHeight(), 0.1f, 1000.0f); + final int z0 = -1000; final int[] sampleCountIO = { sampleCount }; // display @@ -206,23 +207,23 @@ public class TestTextRendererNEWT01 extends UITestCase { final float mmSize = fontSize / pixelsPerMM[1]; final int unitsPerEM = font.getMetrics().getUnitsPerEM(); String txt = String.format("Resolution dpiV %.2f, %.2f px/mm", dpi[1], pixelsPerMM[1]); - renderString(drawable, gl, renderer, textRenderUtil, txt, 0, 0, -1000, sampleCountIO); + renderString(drawable, gl, renderer, textRenderUtil, txt, 0, 0, z0, sampleCountIO); txt = String.format("Font %s, unitsPerEM %d, size %.2f px %2f mm", font.getFullFamilyName(), unitsPerEM, fontSize, mmSize); - renderString(drawable, gl, renderer, textRenderUtil, txt, 0, -1, -1000, sampleCountIO); + renderString(drawable, gl, renderer, textRenderUtil, txt, 0, -1, z0, sampleCountIO); } - renderString(drawable, gl, renderer, textRenderUtil, "012345678901234567890123456789", 0, -1, -1000, sampleCountIO); - renderString(drawable, gl, renderer, textRenderUtil, "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", 0, -1, -1000, sampleCountIO); - renderString(drawable, gl, renderer, textRenderUtil, "Hello World", 0, -1, -1000, sampleCountIO); - renderString(drawable, gl, renderer, textRenderUtil, "4567890123456", 4, -1, -1000,sampleCountIO); - renderString(drawable, gl, renderer, textRenderUtil, "I like JogAmp", 4, -1, -1000, sampleCountIO); + renderString(drawable, gl, renderer, textRenderUtil, "012345678901234567890123456789", 0, -1, z0, sampleCountIO); + renderString(drawable, gl, renderer, textRenderUtil, "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", 0, -1, z0, sampleCountIO); + renderString(drawable, gl, renderer, textRenderUtil, "Hello World", 0, -1, z0, sampleCountIO); + renderString(drawable, gl, renderer, textRenderUtil, "4567890123456", 4, -1, z0,sampleCountIO); + renderString(drawable, gl, renderer, textRenderUtil, "I like JogAmp", 4, -1, z0, sampleCountIO); int c = 0; - renderString(drawable, gl, renderer, textRenderUtil, "GlueGen", c++, -1, -1000, sampleCountIO); - renderString(drawable, gl, renderer, textRenderUtil, "JOAL", c++, -1, -1000, sampleCountIO); - renderString(drawable, gl, renderer, textRenderUtil, "JOGL", c++, -1, -1000, sampleCountIO); - renderString(drawable, gl, renderer, textRenderUtil, "JOCL", c++, -1, -1000, sampleCountIO); + renderString(drawable, gl, renderer, textRenderUtil, "GlueGen", c++, -1, z0, sampleCountIO); + renderString(drawable, gl, renderer, textRenderUtil, "JOAL", c++, -1, z0, sampleCountIO); + renderString(drawable, gl, renderer, textRenderUtil, "JOGL", c++, -1, z0, sampleCountIO); + renderString(drawable, gl, renderer, textRenderUtil, "JOCL", c++, -1, z0, sampleCountIO); } else { - renderString(drawable, gl, renderer, textRenderUtil, customStr, 0, 0, -1000, sampleCountIO); + renderString(drawable, gl, renderer, textRenderUtil, customStr, 0, 0, z0, sampleCountIO); } gl.glFinish(); printScreen(renderModes, drawable, gl, false, sampleCount); @@ -240,7 +241,9 @@ public class TestTextRendererNEWT01 extends UITestCase { private GLReadBufferUtil screenshot; int lastRow = -1; - void renderString(final GLDrawable drawable, final GL2ES2 gl, final RegionRenderer renderer, final TextRegionUtil textRenderUtil, final String text, final int column, int row, final int z0, final int[] sampleCount) { + void renderString(final GLDrawable drawable, final GL2ES2 gl, final RegionRenderer renderer, final TextRegionUtil textRenderUtil, final String text, + final int column, int row, final int z0, final int[] sampleCount) + { final int height = drawable.getSurfaceHeight(); float dx = 0; diff --git a/src/test/com/jogamp/opengl/test/junit/graph/demos/GPUTextNewtDemo.java b/src/test/com/jogamp/opengl/test/junit/graph/demos/GPUTextNewtDemo.java index ef6208fa7..ed7f7493f 100644 --- a/src/test/com/jogamp/opengl/test/junit/graph/demos/GPUTextNewtDemo.java +++ b/src/test/com/jogamp/opengl/test/junit/graph/demos/GPUTextNewtDemo.java @@ -30,10 +30,15 @@ package com.jogamp.opengl.test.junit.graph.demos; import com.jogamp.opengl.GLCapabilities; import com.jogamp.opengl.GLProfile; import com.jogamp.opengl.math.geom.AABBox; + +import java.io.File; +import java.io.IOException; + import com.jogamp.common.util.InterruptSource; import com.jogamp.graph.curve.Region; import com.jogamp.graph.curve.opengl.RenderState; import com.jogamp.graph.font.Font; +import com.jogamp.graph.font.FontFactory; import com.jogamp.graph.font.FontScale; import com.jogamp.graph.geom.SVertex; import com.jogamp.newt.event.KeyAdapter; @@ -62,7 +67,9 @@ public class GPUTextNewtDemo { static int GraphVBAASamples = 4; static int GraphMSAASamples = 0; - public static void main(final String[] args) { + public static void main(final String[] args) throws IOException { + Font opt_font = null; + int opt_fontSizeHead = -1; int width = 800, height = 400; int x = 10, y = 10; if( 0 != args.length ) { @@ -94,6 +101,12 @@ public class GPUTextNewtDemo { } else if(args[i].equals("-y")) { i++; y = MiscUtils.atoi(args[i], y); + } else if(args[i].equals("-font")) { + i++; + opt_font = FontFactory.get(new File(args[i])); + } else if(args[i].equals("-fontSize")) { + i++; + opt_fontSizeHead = MiscUtils.atoi(args[i], opt_fontSizeHead); } } } @@ -130,17 +143,19 @@ public class GPUTextNewtDemo { final RenderState rs = RenderState.createRenderState(SVertex.factory()); final GPUTextGLListener0A textGLListener = new GPUTextGLListener0A(rs, rmode, sampleCount, true, DEBUG, TRACE); + textGLListener.setFont(opt_font); + textGLListener.setFontHeadSize(opt_fontSizeHead); // ((TextRenderer)textGLListener.getRenderer()).setCacheLimit(32); window.addGLEventListener(textGLListener); window.setVisible(true); { - final Font font = textGLListener.getFont(); + final Font font2 = textGLListener.getFont(); final float[] sDPI = FontScale.perMMToPerInch( window.getPixelsPerMM(new float[2]) ); final float font_ptpi = 12f; final float font_ppi = FontScale.toPixels(font_ptpi, sDPI[1]); - final AABBox fontNameBox = font.getMetricBounds(GPUTextRendererListenerBase01.textX1); - System.err.println("GPU Text Newt Demo: "+font.fullString()); + final AABBox fontNameBox = font2.getMetricBounds(GPUTextRendererListenerBase01.textX1); + System.err.println("GPU Text Newt Demo: "+font2.fullString()); System.err.println("GPU Text Newt Demo: screen-dpi: "+sDPI[0]+"x"+sDPI[1]+", font "+font_ptpi+" pt, "+font_ppi+" pixel"); System.err.println("GPU Text Newt Demo: textX2: "+fontNameBox+" em, "+fontNameBox.scale(font_ppi, new float[3])+" px"); // window.setSurfaceSize((int)(fontNameBox.getWidth()*1.1f), (int)(fontNameBox.getHeight()*2f)); 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 7b1fe6177..0e60ae160 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 @@ -190,6 +190,17 @@ public abstract class GPUTextRendererListenerBase01 extends GPURendererListenerB } } + public void setHeadBox(final String text, final boolean resize) { + headtext = text; + if(resize && null != headtext) { + headbox = font.getMetricBounds(headtext); + if( headtext != text_help ) { + final float pxSz = FontScale.toPixels(fontSizeHead, dpiV); + upsizeWindowSurface(upstream_window, true, (int)(headbox.getWidth()*pxSz*1.1f), (int)(headbox.getHeight()*pxSz*2f)); + } + } + } + public static void upsizeWindowSurface(final Window window, final boolean off_thread, final int w, final int h) { if( null == window ) { return; @@ -408,11 +419,22 @@ public abstract class GPUTextRendererListenerBase01 extends GPURendererListenerB public void fontHeadIncr(final int v) { fontSizeHead = Math.abs((fontSizeHead + v) % fontSizeModulo) ; + updateFontNameBox(); if(null != headtext) { headbox = font.getMetricBounds(headtext); } } + public void setFontHeadSize(final int v) { + if( 0 < v ) { + fontSizeHead = v % fontSizeModulo; + updateFontNameBox(); + if(null != headtext) { + headbox = font.getMetricBounds(headtext); + } + } + } + public boolean nextFontSet() { try { final int set = ( fontSet == FontFactory.UBUNTU ) ? FontFactory.JAVA : FontFactory.UBUNTU ; @@ -420,8 +442,7 @@ public abstract class GPUTextRendererListenerBase01 extends GPURendererListenerB if(null != _font) { fontSet = set; font = _font; - fontName = font.getFullFamilyName(); - fontNameBox = font.getMetricBounds(fontName); + updateFontNameBox(); return true; } } catch (final IOException ex) { @@ -436,8 +457,7 @@ public abstract class GPUTextRendererListenerBase01 extends GPURendererListenerB if(null != _font) { fontSet = set; font = _font; - fontName = font.getFullFamilyName()+" (head "+fontSizeHead+"pt)"; - fontNameBox = font.getMetricBounds(fontName); + updateFontNameBox(); return true; } } catch (final IOException ex) { @@ -450,13 +470,17 @@ public abstract class GPUTextRendererListenerBase01 extends GPURendererListenerB if(null != _font) { // fontSet = ??? font = _font; - fontName = font.getFullFamilyName()+" (head "+fontSizeHead+"pt)"; - fontNameBox = font.getMetricBounds(fontName); + updateFontNameBox(); return true; } return false; } + private void updateFontNameBox() { + fontName = font.getFullFamilyName()+" (head "+fontSizeHead+"pt)"; + fontNameBox = font.getMetricBounds(fontName); + } + public boolean isUserInputMode() { return userInput; } void dumpMatrix(final boolean bbox) { 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 749ac7965..d85475451 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 @@ -28,6 +28,7 @@ package com.jogamp.opengl.test.junit.graph.demos.ui; import com.jogamp.opengl.GL2ES2; +import com.jogamp.opengl.math.geom.AABBox; import com.jogamp.graph.curve.OutlineShape; import com.jogamp.graph.curve.opengl.RegionRenderer; import com.jogamp.graph.font.Font; @@ -86,16 +87,11 @@ public class Label extends UIShape { protected void destroyImpl(final GL2ES2 gl, final RegionRenderer renderer) { } - private final float[] tmpV3 = new float[3]; - private final AffineTransform tempT1 = new AffineTransform(); - private final AffineTransform tempT2 = new AffineTransform(); - private final OutlineShape.Visitor shapeVisitor = new OutlineShape.Visitor() { @Override public void visit(final OutlineShape shape, final AffineTransform t) { shape.setSharpness(shapesSharpness); region.addOutlineShape(shape, t, rgbaColor); - box.resize(shape.getBounds(), t, tmpV3); } }; @@ -103,9 +99,10 @@ public class Label extends UIShape { protected void addShapeToRegion(final GL2ES2 gl, final RegionRenderer renderer) { final AffineTransform t_sxy = new AffineTransform(); t_sxy.setToScale(pixelSize, pixelSize); - font.processString(shapeVisitor, t_sxy, text, tempT1, tempT2); + final AABBox fbox = font.processString(shapeVisitor, t_sxy, text); final float[] ctr = box.getCenter(); setRotationOrigin( ctr[0], ctr[1], ctr[2]); + box.resize(fbox); } @Override diff --git a/src/test/com/jogamp/opengl/test/junit/graph/demos/ui/UITypeDemo01.java b/src/test/com/jogamp/opengl/test/junit/graph/demos/ui/UITypeDemo01.java index 53f280672..183d81f27 100644 --- a/src/test/com/jogamp/opengl/test/junit/graph/demos/ui/UITypeDemo01.java +++ b/src/test/com/jogamp/opengl/test/junit/graph/demos/ui/UITypeDemo01.java @@ -300,8 +300,14 @@ public class UITypeDemo01 implements GLEventListener { full_width_o = objCoord1[0] - objCoord0[0]; full_height_o = objCoord1[1] - objCoord0[1]; } - final Font.Glyph glyph = Glyph.ID_UNKNOWN != glyph_id ? font.getGlyph(glyph_id) : null; - if( null != glyph && null != glyph.getShape() && glyph.getID() != Glyph.ID_UNKNOWN ) { + final Font.Glyph glyph; + if( Glyph.ID_UNKNOWN != glyph_id ) { + glyph = font.getGlyph(glyph_id); + System.err.println("glyph_id "+glyph_id+": "+glyph); + } else { + glyph = null; + } + if( null != glyph && glyph.getID() != Glyph.ID_UNKNOWN ) { final AABBox txt_box_em = glyph.getBBox(); final float full_width_s = full_width_o / txt_box_em.getWidth(); final float full_height_s = full_height_o / txt_box_em.getHeight(); @@ -309,7 +315,7 @@ public class UITypeDemo01 implements GLEventListener { pmv.glPushMatrix(); pmv.glScalef(txt_scale, txt_scale, 1f); pmv.glTranslatef(-txt_box_em.getWidth(), 0f, 0f); - { + if( null != glyph.getShape() ) { final GLRegion region = GLRegion.create(renderModes, null); region.addOutlineShape(glyph.getShape(), null, region.hasColorChannel() ? fg_color : null); region.draw(gl, renderer, sampleCount); |