* Introduce Image.isNPOT() which is now used to check if the image is non-power-of-2 in renderer implementations.

experimental
shadowislord 11 years ago
parent d694229335
commit 81498d6f79
  1. 20
      jme3-android/src/main/java/com/jme3/renderer/android/TextureUtil.java
  2. 12
      jme3-core/src/main/java/com/jme3/texture/Image.java
  3. 20
      jme3-ios/src/main/java/com/jme3/renderer/ios/TextureUtil.java
  4. 12
      jme3-jogl/src/main/java/com/jme3/renderer/jogl/JoglGL1Renderer.java
  5. 15
      jme3-jogl/src/main/java/com/jme3/renderer/jogl/JoglRenderer.java
  6. 12
      jme3-lwjgl/src/main/java/com/jme3/renderer/lwjgl/LwjglGL1Renderer.java
  7. 15
      jme3-lwjgl/src/main/java/com/jme3/renderer/lwjgl/LwjglRenderer.java

@ -429,13 +429,11 @@ public class TextureUtil {
int width = img.getWidth();
int height = img.getHeight();
if (!NPOT) {
if (!NPOT && img.isNPOT()) {
// Check if texture is POT
if (!FastMath.isPowerOfTwo(width) || !FastMath.isPowerOfTwo(height)) {
throw new RendererException("Non-power-of-2 textures "
+ "are not supported by the video hardware "
+ "and no scaling path available for image: " + img);
}
throw new RendererException("Non-power-of-2 textures "
+ "are not supported by the video hardware "
+ "and no scaling path available for image: " + img);
}
AndroidGLImageFormat imageFormat = getImageFormat(fmt);
@ -524,13 +522,11 @@ public class TextureUtil {
int width = img.getWidth();
int height = img.getHeight();
if (!NPOT) {
if (!NPOT && img.isNPOT()) {
// Check if texture is POT
if (!FastMath.isPowerOfTwo(width) || !FastMath.isPowerOfTwo(height)) {
throw new RendererException("Non-power-of-2 textures "
+ "are not supported by the video hardware "
+ "and no scaling path available for image: " + img);
}
throw new RendererException("Non-power-of-2 textures "
+ "are not supported by the video hardware "
+ "and no scaling path available for image: " + img);
}
AndroidGLImageFormat imageFormat = getImageFormat(fmt);

@ -32,6 +32,7 @@
package com.jme3.texture;
import com.jme3.export.*;
import com.jme3.math.FastMath;
import com.jme3.renderer.Caps;
import com.jme3.renderer.Renderer;
import com.jme3.texture.image.ColorSpace;
@ -392,6 +393,17 @@ public class Image extends NativeObject implements Savable /*, Cloneable*/ {
return needGeneratedMips;
}
/**
* Determine if the image is NPOT.
*
* @return if the image is a non-power-of-2 image, e.g. having dimensions
* that are not powers of 2.
*/
public boolean isNPOT() {
return width != 0 && height != 0
&& (!FastMath.isPowerOfTwo(width) || !FastMath.isPowerOfTwo(height));
}
@Override
public void resetObject() {
this.id = -1;

@ -443,13 +443,11 @@ public class TextureUtil {
int width = img.getWidth();
int height = img.getHeight();
if (!NPOT) {
if (!NPOT && img.isNPOT()) {
// Check if texture is POT
if (!FastMath.isPowerOfTwo(width) || !FastMath.isPowerOfTwo(height)) {
throw new RendererException("Non-power-of-2 textures "
+ "are not supported by the video hardware "
+ "and no scaling path available for image: " + img);
}
throw new RendererException("Non-power-of-2 textures "
+ "are not supported by the video hardware "
+ "and no scaling path available for image: " + img);
}
IosGLImageFormat imageFormat = getImageFormat(fmt);
@ -543,13 +541,11 @@ public class TextureUtil {
int width = img.getWidth();
int height = img.getHeight();
if (!NPOT) {
if (!NPOT && img.isNPOT()) {
// Check if texture is POT
if (!FastMath.isPowerOfTwo(width) || !FastMath.isPowerOfTwo(height)) {
throw new RendererException("Non-power-of-2 textures "
+ "are not supported by the video hardware "
+ "and no scaling path available for image: " + img);
}
throw new RendererException("Non-power-of-2 textures "
+ "are not supported by the video hardware "
+ "and no scaling path available for image: " + img);
}
IosGLImageFormat imageFormat = getImageFormat(fmt);

@ -806,15 +806,9 @@ public class JoglGL1Renderer implements GL1Renderer {
}
// Check sizes if graphics card doesn't support NPOT
if (!gl.isExtensionAvailable("GL_ARB_texture_non_power_of_two")) {
if (img.getWidth() != 0 && img.getHeight() != 0) {
if (!FastMath.isPowerOfTwo(img.getWidth())
|| !FastMath.isPowerOfTwo(img.getHeight())) {
// Resize texture to Power-of-2 size
MipMapGenerator.resizeToPowerOf2(img);
}
}
if (!gl.isExtensionAvailable("GL_ARB_texture_non_power_of_two") && img.isNPOT()) {
// Resize texture to Power-of-2 size
MipMapGenerator.resizeToPowerOf2(img);
}
if (!img.hasMipmaps() && img.isGeneratedMipmapsRequired()) {

@ -1962,16 +1962,11 @@ public class JoglRenderer implements Renderer {
}
// Yes, some OpenGL2 cards (GeForce 5) still dont support NPOT.
if (!gl.isExtensionAvailable("GL_ARB_texture_non_power_of_two")) {
if (img.getWidth() != 0 && img.getHeight() != 0) {
if (!FastMath.isPowerOfTwo(img.getWidth())
|| !FastMath.isPowerOfTwo(img.getHeight())) {
if (img.getData(0) == null) {
throw new RendererException("non-power-of-2 framebuffer textures are not supported by the video hardware");
} else {
MipMapGenerator.resizeToPowerOf2(img);
}
}
if (!gl.isExtensionAvailable("GL_ARB_texture_non_power_of_two") && img.isNPOT()) {
if (img.getData(0) == null) {
throw new RendererException("non-power-of-2 framebuffer textures are not supported by the video hardware");
} else {
MipMapGenerator.resizeToPowerOf2(img);
}
}

@ -753,15 +753,9 @@ public class LwjglGL1Renderer implements GL1Renderer {
}
// Check sizes if graphics card doesn't support NPOT
if (!GLContext.getCapabilities().GL_ARB_texture_non_power_of_two) {
if (img.getWidth() != 0 && img.getHeight() != 0) {
if (!FastMath.isPowerOfTwo(img.getWidth())
|| !FastMath.isPowerOfTwo(img.getHeight())) {
// Resize texture to Power-of-2 size
MipMapGenerator.resizeToPowerOf2(img);
}
}
if (!GLContext.getCapabilities().GL_ARB_texture_non_power_of_two && img.isNPOT()) {
// Resize texture to Power-of-2 size
MipMapGenerator.resizeToPowerOf2(img);
}
if (!img.hasMipmaps() && img.isGeneratedMipmapsRequired()) {

@ -1870,16 +1870,11 @@ public class LwjglRenderer implements Renderer {
}
// Yes, some OpenGL2 cards (GeForce 5) still dont support NPOT.
if (!GLContext.getCapabilities().GL_ARB_texture_non_power_of_two) {
if (img.getWidth() != 0 && img.getHeight() != 0) {
if (!FastMath.isPowerOfTwo(img.getWidth())
|| !FastMath.isPowerOfTwo(img.getHeight())) {
if (img.getData(0) == null) {
throw new RendererException("non-power-of-2 framebuffer textures are not supported by the video hardware");
} else {
MipMapGenerator.resizeToPowerOf2(img);
}
}
if (!GLContext.getCapabilities().GL_ARB_texture_non_power_of_two && img.isNPOT()) {
if (img.getData(0) == null) {
throw new RendererException("non-power-of-2 framebuffer textures are not supported by the video hardware");
} else {
MipMapGenerator.resizeToPowerOf2(img);
}
}

Loading…
Cancel
Save