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 | 62e346b4562371031ec4732b27ac80447e509946 (patch) | |
tree | cd00a9784a29a7bcd81efbf7ecfbf92ba6d93d60 /src/classes/com/sun/opengl/util/texture | |
parent | de4c2584441a9972df8a0db3faaadb0d1d10970b (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/trunk@1071 232f8b59-042b-4e1e-8c03-345bb8c30851
Diffstat (limited to 'src/classes/com/sun/opengl/util/texture')
-rwxr-xr-x | src/classes/com/sun/opengl/util/texture/Texture.java | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/classes/com/sun/opengl/util/texture/Texture.java b/src/classes/com/sun/opengl/util/texture/Texture.java index d22aabc9a..68d8dffe6 100755 --- a/src/classes/com/sun/opengl/util/texture/Texture.java +++ b/src/classes/com/sun/opengl/util/texture/Texture.java @@ -744,6 +744,8 @@ public class Texture { gl.glBindTexture(newTarget, texID); int rowlen = data.getRowLength(); + int dataWidth = data.getWidth(); + int dataHeight = data.getHeight(); if (data.getMipmapData() != null) { // Compute the width, height and row length at the specified mipmap level // Note we do not support specification of the row length for @@ -751,11 +753,47 @@ public class Texture { for (int i = 0; i < mipmapLevel; i++) { width /= 2; height /= 2; + + dataWidth /= 2; + dataHeight /= 2; } rowlen = 0; buffer = data.getMipmapData()[mipmapLevel]; } + // Clip incoming rectangles to what is available both on this + // texture and in the incoming TextureData + if (srcx < 0) { + width += srcx; + srcx = 0; + } + if (srcy < 0) { + height += srcy; + srcy = 0; + } + // NOTE: not sure whether the following two are the correct thing to do + if (dstx < 0) { + width += dstx; + dstx = 0; + } + if (dsty < 0) { + height += dsty; + dsty = 0; + } + + if (srcx + width > dataWidth) { + width = dataWidth - srcx; + } + if (srcy + height > dataHeight) { + height = dataHeight - srcy; + } + if (dstx + width > texWidth) { + width = texWidth - dstx; + } + if (dsty + height > texHeight) { + height = texHeight - dsty; + } + checkCompressedTextureExtensions(data); if (data.isDataCompressed()) { |