diff options
author | Kenneth Russel <[email protected]> | 2007-01-06 00:43:17 +0000 |
---|---|---|
committer | Kenneth Russel <[email protected]> | 2007-01-06 00:43:17 +0000 |
commit | 2b34526dd5c5274d14862f23b81f79dc7fbbe469 (patch) | |
tree | 4d1122217ee0b7e4ae1828b2bf0f2f2e58236d82 /src/demos/j2d | |
parent | a4d2028b3827d9fe6041caf9cdf8e30fccdd87c2 (diff) |
With help from Chris Campbell, fixed incredibly stupid bug on my part
where the new Java 2D TextureRenderer was destroying and re-creating
the OpenGL texture every frame. This was why the Java 2D Overlay class
was so expensive, and why the TextRenderer wasn't as fast as it seemed
it should be. Fixed bugs in all of the Java 2D demos which were
covered up by this implicit sync, as well as in the TextRenderer class
itself where it was missing a key sync operation. Added code to the
Texture.updateSubImage() implementation to clip the incoming rectangle
to the bounds of the input data and texture, to keep OpenGL from
dropping almost-valid updates on the floor. Ran all of the Java 2D
integration demos to verify these fixes.
git-svn-id: file:///usr/local/projects/SUN/JOGL/git-svn/../svn-server-sync/jogl-demos/trunk@198 3298f667-5e0e-4b4a-8ed4-a3559d26a5f4
Diffstat (limited to 'src/demos/j2d')
-rwxr-xr-x | src/demos/j2d/TestOverlay.java | 19 | ||||
-rwxr-xr-x | src/demos/j2d/TestTextRenderer.java | 2 | ||||
-rwxr-xr-x | src/demos/j2d/TestTextureRenderer.java | 1 |
3 files changed, 13 insertions, 9 deletions
diff --git a/src/demos/j2d/TestOverlay.java b/src/demos/j2d/TestOverlay.java index 5faa0d5..adc8ba7 100755 --- a/src/demos/j2d/TestOverlay.java +++ b/src/demos/j2d/TestOverlay.java @@ -103,6 +103,8 @@ public class TestOverlay implements GLEventListener { private int frameCount; private DecimalFormat format = new DecimalFormat("####.00"); + private Rectangle fpsBounds; + public void init(GLAutoDrawable drawable) { GL gl = drawable.getGL(); gl.setSwapInterval(0); @@ -134,23 +136,20 @@ public class TestOverlay implements GLEventListener { FontRenderContext frc = g2d.getFontRenderContext(); String fpsString = "FPS: " + format.format(fps); GlyphVector gv = font.createGlyphVector(frc, TEST_STRING); - int x = drawable.getWidth() - 200; + fpsBounds = gv.getPixelBounds(frc, 0, 0); + int x = drawable.getWidth() - fpsBounds.width - 20; int y = drawable.getHeight() - 20; - Rectangle fpsBounds = gv.getPixelBounds(frc, x, y); g2d.setFont(font); g2d.setComposite(AlphaComposite.Src); g2d.setColor(TRANSPARENT_BLACK); - g2d.fillRect(fpsBounds.x, fpsBounds.y, fpsBounds.width, fpsBounds.height); + g2d.fillRect(x + fpsBounds.x, y + fpsBounds.y, fpsBounds.width, fpsBounds.height); g2d.setColor(Color.WHITE); g2d.drawString(fpsString, x, y); - overlay.sync(fpsBounds.x, fpsBounds.y, fpsBounds.width, fpsBounds.height); + overlay.sync(x + fpsBounds.x, y + fpsBounds.y, fpsBounds.width, fpsBounds.height); } time.update(); - // Move down the text bounds - lastTextBounds = textBounds; - g2d.setFont(font); g2d.setComposite(AlphaComposite.Src); if (overlay.contentsLost()) { @@ -191,7 +190,11 @@ public class TestOverlay implements GLEventListener { if (lastTextBounds != null) { union.add(lastTextBounds); } - overlay.sync(union.x, union.y, union.width, union.height); + // Put a little slop around this text due to apparent rounding errors + overlay.sync(union.x, union.y, union.width + 10, union.height + 10); + + // Move down the text bounds + lastTextBounds = textBounds; // Draw the overlay overlay.drawAll(); diff --git a/src/demos/j2d/TestTextRenderer.java b/src/demos/j2d/TestTextRenderer.java index 853009c..0356606 100755 --- a/src/demos/j2d/TestTextRenderer.java +++ b/src/demos/j2d/TestTextRenderer.java @@ -134,7 +134,7 @@ public class TestTextRenderer implements GLEventListener { fpsText = "FPS: " + format.format(fps); if (fpsWidth == 0) { // Place it at a fixed offset wrt the lower right corner - fpsWidth = (int) renderer.getBounds("FPS: 1000.00").getWidth(); + fpsWidth = (int) renderer.getBounds("FPS: 10000.00").getWidth(); } } diff --git a/src/demos/j2d/TestTextureRenderer.java b/src/demos/j2d/TestTextureRenderer.java index 09f3fd8..596115e 100755 --- a/src/demos/j2d/TestTextureRenderer.java +++ b/src/demos/j2d/TestTextureRenderer.java @@ -151,6 +151,7 @@ public class TestTextureRenderer implements GLEventListener { g2d.fillRect(fpsBounds.x, fpsBounds.y, fpsBounds.width, fpsBounds.height); g2d.setColor(Color.WHITE); g2d.drawString(fpsString, 10, 100); + renderer.sync(fpsBounds.x, fpsBounds.y, fpsBounds.width, fpsBounds.height); } time.update(); |