aboutsummaryrefslogtreecommitdiffstats
path: root/src/classes/com/sun/opengl/util/texture
diff options
context:
space:
mode:
authorKenneth Russel <[email protected]>2007-01-06 00:43:17 +0000
committerKenneth Russel <[email protected]>2007-01-06 00:43:17 +0000
commit62e346b4562371031ec4732b27ac80447e509946 (patch)
treecd00a9784a29a7bcd81efbf7ecfbf92ba6d93d60 /src/classes/com/sun/opengl/util/texture
parentde4c2584441a9972df8a0db3faaadb0d1d10970b (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-xsrc/classes/com/sun/opengl/util/texture/Texture.java38
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()) {