summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xsrc/classes/com/sun/opengl/util/j2d/TextRenderer.java2
-rwxr-xr-xsrc/classes/com/sun/opengl/util/j2d/TextureRenderer.java8
-rwxr-xr-xsrc/classes/com/sun/opengl/util/texture/Texture.java38
3 files changed, 47 insertions, 1 deletions
diff --git a/src/classes/com/sun/opengl/util/j2d/TextRenderer.java b/src/classes/com/sun/opengl/util/j2d/TextRenderer.java
index 75fc5ae70..e97c31173 100755
--- a/src/classes/com/sun/opengl/util/j2d/TextRenderer.java
+++ b/src/classes/com/sun/opengl/util/j2d/TextRenderer.java
@@ -310,6 +310,8 @@ public class TextRenderer {
g.setColor(Color.WHITE);
// Draw the string
g.drawString(curStr, strx, stry);
+ // Sync to the OpenGL texture
+ getBackingStore().sync(rect.x(), rect.y(), rect.w(), rect.h());
}
// OK, now draw the portion of the backing store to the screen
diff --git a/src/classes/com/sun/opengl/util/j2d/TextureRenderer.java b/src/classes/com/sun/opengl/util/j2d/TextureRenderer.java
index f758e4f6c..360a82b25 100755
--- a/src/classes/com/sun/opengl/util/j2d/TextureRenderer.java
+++ b/src/classes/com/sun/opengl/util/j2d/TextureRenderer.java
@@ -244,7 +244,12 @@ public class TextureRenderer {
boolean canSkipUpdate = ensureTexture();
if (!canSkipUpdate) {
- // Update specified region
+ // Update specified region.
+ // NOTE that because BufferedImage-based TextureDatas now don't
+ // do anything to their contents, the coordinate systems for
+ // OpenGL and Java 2D actually line up correctly for
+ // updateSubImage calls, so we don't need to do any argument
+ // conversion here (i.e., flipping the Y coordinate).
texture.updateSubImage(textureData, 0, x, y, x, y, width, height);
}
}
@@ -420,6 +425,7 @@ public class TextureRenderer {
texture.dispose();
texture = null;
}
+ mustReallocateTexture = false;
}
if (texture == null) {
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()) {