* Introduce Image.isNPOT() which is now used to check if the image is non-power-of-2 in renderer implementations.
This commit is contained in:
parent
d694229335
commit
81498d6f79
@ -429,13 +429,11 @@ public class TextureUtil {
|
|||||||
int width = img.getWidth();
|
int width = img.getWidth();
|
||||||
int height = img.getHeight();
|
int height = img.getHeight();
|
||||||
|
|
||||||
if (!NPOT) {
|
if (!NPOT && img.isNPOT()) {
|
||||||
// Check if texture is POT
|
// Check if texture is POT
|
||||||
if (!FastMath.isPowerOfTwo(width) || !FastMath.isPowerOfTwo(height)) {
|
throw new RendererException("Non-power-of-2 textures "
|
||||||
throw new RendererException("Non-power-of-2 textures "
|
+ "are not supported by the video hardware "
|
||||||
+ "are not supported by the video hardware "
|
+ "and no scaling path available for image: " + img);
|
||||||
+ "and no scaling path available for image: " + img);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
AndroidGLImageFormat imageFormat = getImageFormat(fmt);
|
AndroidGLImageFormat imageFormat = getImageFormat(fmt);
|
||||||
|
|
||||||
@ -524,13 +522,11 @@ public class TextureUtil {
|
|||||||
int width = img.getWidth();
|
int width = img.getWidth();
|
||||||
int height = img.getHeight();
|
int height = img.getHeight();
|
||||||
|
|
||||||
if (!NPOT) {
|
if (!NPOT && img.isNPOT()) {
|
||||||
// Check if texture is POT
|
// Check if texture is POT
|
||||||
if (!FastMath.isPowerOfTwo(width) || !FastMath.isPowerOfTwo(height)) {
|
throw new RendererException("Non-power-of-2 textures "
|
||||||
throw new RendererException("Non-power-of-2 textures "
|
+ "are not supported by the video hardware "
|
||||||
+ "are not supported by the video hardware "
|
+ "and no scaling path available for image: " + img);
|
||||||
+ "and no scaling path available for image: " + img);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
AndroidGLImageFormat imageFormat = getImageFormat(fmt);
|
AndroidGLImageFormat imageFormat = getImageFormat(fmt);
|
||||||
|
|
||||||
|
@ -32,6 +32,7 @@
|
|||||||
package com.jme3.texture;
|
package com.jme3.texture;
|
||||||
|
|
||||||
import com.jme3.export.*;
|
import com.jme3.export.*;
|
||||||
|
import com.jme3.math.FastMath;
|
||||||
import com.jme3.renderer.Caps;
|
import com.jme3.renderer.Caps;
|
||||||
import com.jme3.renderer.Renderer;
|
import com.jme3.renderer.Renderer;
|
||||||
import com.jme3.texture.image.ColorSpace;
|
import com.jme3.texture.image.ColorSpace;
|
||||||
@ -392,6 +393,17 @@ public class Image extends NativeObject implements Savable /*, Cloneable*/ {
|
|||||||
return needGeneratedMips;
|
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
|
@Override
|
||||||
public void resetObject() {
|
public void resetObject() {
|
||||||
this.id = -1;
|
this.id = -1;
|
||||||
|
@ -443,13 +443,11 @@ public class TextureUtil {
|
|||||||
int width = img.getWidth();
|
int width = img.getWidth();
|
||||||
int height = img.getHeight();
|
int height = img.getHeight();
|
||||||
|
|
||||||
if (!NPOT) {
|
if (!NPOT && img.isNPOT()) {
|
||||||
// Check if texture is POT
|
// Check if texture is POT
|
||||||
if (!FastMath.isPowerOfTwo(width) || !FastMath.isPowerOfTwo(height)) {
|
throw new RendererException("Non-power-of-2 textures "
|
||||||
throw new RendererException("Non-power-of-2 textures "
|
+ "are not supported by the video hardware "
|
||||||
+ "are not supported by the video hardware "
|
+ "and no scaling path available for image: " + img);
|
||||||
+ "and no scaling path available for image: " + img);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
IosGLImageFormat imageFormat = getImageFormat(fmt);
|
IosGLImageFormat imageFormat = getImageFormat(fmt);
|
||||||
|
|
||||||
@ -543,13 +541,11 @@ public class TextureUtil {
|
|||||||
int width = img.getWidth();
|
int width = img.getWidth();
|
||||||
int height = img.getHeight();
|
int height = img.getHeight();
|
||||||
|
|
||||||
if (!NPOT) {
|
if (!NPOT && img.isNPOT()) {
|
||||||
// Check if texture is POT
|
// Check if texture is POT
|
||||||
if (!FastMath.isPowerOfTwo(width) || !FastMath.isPowerOfTwo(height)) {
|
throw new RendererException("Non-power-of-2 textures "
|
||||||
throw new RendererException("Non-power-of-2 textures "
|
+ "are not supported by the video hardware "
|
||||||
+ "are not supported by the video hardware "
|
+ "and no scaling path available for image: " + img);
|
||||||
+ "and no scaling path available for image: " + img);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
IosGLImageFormat imageFormat = getImageFormat(fmt);
|
IosGLImageFormat imageFormat = getImageFormat(fmt);
|
||||||
|
|
||||||
|
@ -806,15 +806,9 @@ public class JoglGL1Renderer implements GL1Renderer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Check sizes if graphics card doesn't support NPOT
|
// Check sizes if graphics card doesn't support NPOT
|
||||||
if (!gl.isExtensionAvailable("GL_ARB_texture_non_power_of_two")) {
|
if (!gl.isExtensionAvailable("GL_ARB_texture_non_power_of_two") && img.isNPOT()) {
|
||||||
if (img.getWidth() != 0 && img.getHeight() != 0) {
|
// Resize texture to Power-of-2 size
|
||||||
if (!FastMath.isPowerOfTwo(img.getWidth())
|
MipMapGenerator.resizeToPowerOf2(img);
|
||||||
|| !FastMath.isPowerOfTwo(img.getHeight())) {
|
|
||||||
|
|
||||||
// Resize texture to Power-of-2 size
|
|
||||||
MipMapGenerator.resizeToPowerOf2(img);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!img.hasMipmaps() && img.isGeneratedMipmapsRequired()) {
|
if (!img.hasMipmaps() && img.isGeneratedMipmapsRequired()) {
|
||||||
|
@ -1962,16 +1962,11 @@ public class JoglRenderer implements Renderer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Yes, some OpenGL2 cards (GeForce 5) still dont support NPOT.
|
// Yes, some OpenGL2 cards (GeForce 5) still dont support NPOT.
|
||||||
if (!gl.isExtensionAvailable("GL_ARB_texture_non_power_of_two")) {
|
if (!gl.isExtensionAvailable("GL_ARB_texture_non_power_of_two") && img.isNPOT()) {
|
||||||
if (img.getWidth() != 0 && img.getHeight() != 0) {
|
if (img.getData(0) == null) {
|
||||||
if (!FastMath.isPowerOfTwo(img.getWidth())
|
throw new RendererException("non-power-of-2 framebuffer textures are not supported by the video hardware");
|
||||||
|| !FastMath.isPowerOfTwo(img.getHeight())) {
|
} else {
|
||||||
if (img.getData(0) == null) {
|
MipMapGenerator.resizeToPowerOf2(img);
|
||||||
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
|
// Check sizes if graphics card doesn't support NPOT
|
||||||
if (!GLContext.getCapabilities().GL_ARB_texture_non_power_of_two) {
|
if (!GLContext.getCapabilities().GL_ARB_texture_non_power_of_two && img.isNPOT()) {
|
||||||
if (img.getWidth() != 0 && img.getHeight() != 0) {
|
// Resize texture to Power-of-2 size
|
||||||
if (!FastMath.isPowerOfTwo(img.getWidth())
|
MipMapGenerator.resizeToPowerOf2(img);
|
||||||
|| !FastMath.isPowerOfTwo(img.getHeight())) {
|
|
||||||
|
|
||||||
// Resize texture to Power-of-2 size
|
|
||||||
MipMapGenerator.resizeToPowerOf2(img);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!img.hasMipmaps() && img.isGeneratedMipmapsRequired()) {
|
if (!img.hasMipmaps() && img.isGeneratedMipmapsRequired()) {
|
||||||
|
@ -1870,16 +1870,11 @@ public class LwjglRenderer implements Renderer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Yes, some OpenGL2 cards (GeForce 5) still dont support NPOT.
|
// Yes, some OpenGL2 cards (GeForce 5) still dont support NPOT.
|
||||||
if (!GLContext.getCapabilities().GL_ARB_texture_non_power_of_two) {
|
if (!GLContext.getCapabilities().GL_ARB_texture_non_power_of_two && img.isNPOT()) {
|
||||||
if (img.getWidth() != 0 && img.getHeight() != 0) {
|
if (img.getData(0) == null) {
|
||||||
if (!FastMath.isPowerOfTwo(img.getWidth())
|
throw new RendererException("non-power-of-2 framebuffer textures are not supported by the video hardware");
|
||||||
|| !FastMath.isPowerOfTwo(img.getHeight())) {
|
} else {
|
||||||
if (img.getData(0) == null) {
|
MipMapGenerator.resizeToPowerOf2(img);
|
||||||
throw new RendererException("non-power-of-2 framebuffer textures are not supported by the video hardware");
|
|
||||||
} else {
|
|
||||||
MipMapGenerator.resizeToPowerOf2(img);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user