Implemented OES_texture_npot support.
TRAC #16871
Signed-off-by: Daniel Koch
Author: Nicolas Capens
git-svn-id: https://angleproject.googlecode.com/svn/trunk@661 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/libGLESv2.cpp b/src/libGLESv2/libGLESv2.cpp
index 7c71c63..23957fe 100644
--- a/src/libGLESv2/libGLESv2.cpp
+++ b/src/libGLESv2/libGLESv2.cpp
@@ -28,6 +28,31 @@
#include "libGLESv2/Shader.h"
#include "libGLESv2/Texture.h"
+bool validImageSize(GLint level, GLsizei width, GLsizei height)
+{
+ if (level < 0 || width < 0 || height < 0)
+ {
+ return false;
+ }
+
+ if (gl::getContext() && gl::getContext()->supportsNonPower2Texture())
+ {
+ return true;
+ }
+
+ if (level == 0)
+ {
+ return true;
+ }
+
+ if (gl::isPow2(width) && gl::isPow2(height))
+ {
+ return true;
+ }
+
+ return false;
+}
+
extern "C"
{
@@ -738,12 +763,7 @@
try
{
- if (level < 0)
- {
- return error(GL_INVALID_VALUE);
- }
-
- if (width < 0 || height < 0 || (level > 0 && !gl::isPow2(width)) || (level > 0 && !gl::isPow2(height)) || border != 0 || imageSize < 0)
+ if (!validImageSize(level, width, height) || border != 0 || imageSize < 0)
{
return error(GL_INVALID_VALUE);
}
@@ -868,13 +888,7 @@
return error(GL_INVALID_ENUM);
}
- if (level < 0)
- {
- return error(GL_INVALID_VALUE);
- }
-
- if (xoffset < 0 || yoffset < 0 || width < 0 || height < 0 ||
- (level > 0 && !gl::isPow2(width)) || (level > 0 && !gl::isPow2(height)) || imageSize < 0)
+ if (xoffset < 0 || yoffset < 0 || !validImageSize(level, width, height) || imageSize < 0)
{
return error(GL_INVALID_VALUE);
}
@@ -982,12 +996,7 @@
try
{
- if (level < 0 || width < 0 || height < 0)
- {
- return error(GL_INVALID_VALUE);
- }
-
- if (level > 0 && (!gl::isPow2(width) || !gl::isPow2(height)))
+ if (!validImageSize(level, width, height))
{
return error(GL_INVALID_VALUE);
}
@@ -4397,12 +4406,7 @@
try
{
- if (level < 0 || width < 0 || height < 0)
- {
- return error(GL_INVALID_VALUE);
- }
-
- if (level > 0 && (!gl::isPow2(width) || !gl::isPow2(height)))
+ if (!validImageSize(level, width, height))
{
return error(GL_INVALID_VALUE);
}