aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKevin Rushforth <[email protected]>2006-10-30 23:26:11 +0000
committerKevin Rushforth <[email protected]>2006-10-30 23:26:11 +0000
commit4f8684aa98137db55096a6ac54e567046948a411 (patch)
tree108aac8f17f6f6f402fd70b11141cdddfdc7fa37 /src
parent62c048b3666d71f8fefe9c2571548f250a5ef74a (diff)
Fixed issue 366: Raster appears without image on systems without NPOT support
git-svn-id: https://svn.java.net/svn/j3d-core~svn/trunk@734 ba19aa83-45c5-6ac9-afd3-db810772062c
Diffstat (limited to 'src')
-rw-r--r--src/classes/share/javax/media/j3d/ImageComponentRetained.java23
-rw-r--r--src/classes/share/javax/media/j3d/TextureRetained.java8
2 files changed, 21 insertions, 10 deletions
diff --git a/src/classes/share/javax/media/j3d/ImageComponentRetained.java b/src/classes/share/javax/media/j3d/ImageComponentRetained.java
index 93f477a..8740979 100644
--- a/src/classes/share/javax/media/j3d/ImageComponentRetained.java
+++ b/src/classes/share/javax/media/j3d/ImageComponentRetained.java
@@ -110,6 +110,9 @@ abstract class ImageComponentRetained extends NodeComponentRetained {
// private RenderedImage refImage[] = null;
private Object refImage[] = null;
+ // Issue 366: Lock for evaluateExtensions
+ Object evaluateExtLock = new Object();
+
// Lock used in the "by ref case"
GeometryLock geomLock = new GeometryLock();
@@ -1719,12 +1722,16 @@ abstract class ImageComponentRetained extends NodeComponentRetained {
}
}
- // Lock out user thread from modifying variables by using synchronized routines
+
void evaluateExtensions(Canvas3D canvas) {
- // For performance reason the ordering of the following 2 statements is intentional.
- // So that we only need to do format conversion for imageData only
- evaluateExtABGR(canvas.extensionsSupported);
- evaluateExtNonPowerOfTwo(canvas.textureExtendedFeatures);
+ // Issue 366: need to synchronize since it could be called concurrently
+ // from multiple renderers (and maybe the renderer(s) and renderbin)
+ synchronized (evaluateExtLock) {
+ // For performance reason the ordering of the following 2 statements is intentional.
+ // So that we only need to do format conversion for imageData only
+ evaluateExtABGR(canvas.extensionsSupported);
+ evaluateExtNonPowerOfTwo(canvas.textureExtendedFeatures);
+ }
}
@@ -1798,7 +1805,7 @@ abstract class ImageComponentRetained extends NodeComponentRetained {
if(!npotSupported) {
return;
}
-
+
if (imageData == null && !isByReference()) {
return;
}
@@ -1806,10 +1813,10 @@ abstract class ImageComponentRetained extends NodeComponentRetained {
if((ext & Canvas3D.TEXTURE_NON_POWER_OF_TWO) != 0) {
return;
}
-
+
// NPOT is unsupported, set flag to false.
npotSupported = false;
-
+
int npotWidth;
int npotHeight;
// Always scale up if image size is smaller 512*512.
diff --git a/src/classes/share/javax/media/j3d/TextureRetained.java b/src/classes/share/javax/media/j3d/TextureRetained.java
index ec4de75..4a70508 100644
--- a/src/classes/share/javax/media/j3d/TextureRetained.java
+++ b/src/classes/share/javax/media/j3d/TextureRetained.java
@@ -1554,8 +1554,12 @@ abstract class TextureRetained extends NodeComponentRetained {
// of mipmap levels is defined but the canvas does not
// support lod_range extension
- if (images[j][i] != null) {
- reloadTextureImage(cv, j, i, images[j][i], maxLevels);
+ ImageComponentRetained image = images[j][i];
+ if (image != null) {
+ // Issue 366: call evaluateExtensions, since it may not
+ // have been called yet in all cases
+ image.evaluateExtensions(cv);
+ reloadTextureImage(cv, j, i, image, maxLevels);
}
}
}