Make Texture2D format and compression checks be explicit about the level they are checking

Issue=306 Signed-off-by: Nicolas Capens git-svn-id: https://angleproject.googlecode.com/svn/trunk@1081 736b8ea6-26fd-11df-bfd4-992fa37f6226
parent 4327cff3
...@@ -109,12 +109,12 @@ GLsizei RenderbufferTexture2D::getHeight() const ...@@ -109,12 +109,12 @@ GLsizei RenderbufferTexture2D::getHeight() const
GLenum RenderbufferTexture2D::getInternalFormat() const GLenum RenderbufferTexture2D::getInternalFormat() const
{ {
return mTexture2D->getInternalFormat(); return mTexture2D->getInternalFormat(0);
} }
D3DFORMAT RenderbufferTexture2D::getD3DFormat() const D3DFORMAT RenderbufferTexture2D::getD3DFormat() const
{ {
return mTexture2D->getD3DFormat(); return mTexture2D->getD3DFormat(0);
} }
GLsizei RenderbufferTexture2D::getSamples() const GLsizei RenderbufferTexture2D::getSamples() const
......
...@@ -1802,14 +1802,20 @@ GLsizei Texture2D::getHeight(GLint level) const ...@@ -1802,14 +1802,20 @@ GLsizei Texture2D::getHeight(GLint level) const
return 0; return 0;
} }
GLenum Texture2D::getInternalFormat() const GLenum Texture2D::getInternalFormat(GLint level) const
{ {
return mImageArray[0].getFormat(); if (level < IMPLEMENTATION_MAX_TEXTURE_LEVELS)
return mImageArray[level].getFormat();
else
return GL_NONE;
} }
D3DFORMAT Texture2D::getD3DFormat() const D3DFORMAT Texture2D::getD3DFormat(GLint level) const
{ {
return mImageArray[0].getD3DFormat(); if (level < IMPLEMENTATION_MAX_TEXTURE_LEVELS)
return mImageArray[level].getD3DFormat();
else
return D3DFMT_UNKNOWN;
} }
void Texture2D::redefineImage(GLint level, GLenum format, GLsizei width, GLsizei height, GLenum type) void Texture2D::redefineImage(GLint level, GLenum format, GLsizei width, GLsizei height, GLenum type)
...@@ -2093,8 +2099,8 @@ bool Texture2D::isSamplerComplete() const ...@@ -2093,8 +2099,8 @@ bool Texture2D::isSamplerComplete() const
default: UNREACHABLE(); default: UNREACHABLE();
} }
if ((getInternalFormat() == GL_FLOAT && !getContext()->supportsFloat32LinearFilter()) || if ((getInternalFormat(0) == GL_FLOAT && !getContext()->supportsFloat32LinearFilter()) ||
(getInternalFormat() == GL_HALF_FLOAT_OES && !getContext()->supportsFloat16LinearFilter())) (getInternalFormat(0) == GL_HALF_FLOAT_OES && !getContext()->supportsFloat16LinearFilter()))
{ {
if (mMagFilter != GL_NEAREST || (mMinFilter != GL_NEAREST && mMinFilter != GL_NEAREST_MIPMAP_NEAREST)) if (mMagFilter != GL_NEAREST || (mMinFilter != GL_NEAREST && mMinFilter != GL_NEAREST_MIPMAP_NEAREST))
{ {
...@@ -2176,9 +2182,9 @@ bool Texture2D::isMipmapComplete() const ...@@ -2176,9 +2182,9 @@ bool Texture2D::isMipmapComplete() const
return true; return true;
} }
bool Texture2D::isCompressed() const bool Texture2D::isCompressed(GLint level) const
{ {
return IsCompressed(getInternalFormat()); return IsCompressed(getInternalFormat(level));
} }
IDirect3DBaseTexture9 *Texture2D::getBaseTexture() const IDirect3DBaseTexture9 *Texture2D::getBaseTexture() const
......
...@@ -281,9 +281,9 @@ class Texture2D : public Texture ...@@ -281,9 +281,9 @@ class Texture2D : public Texture
GLsizei getWidth(GLint level) const; GLsizei getWidth(GLint level) const;
GLsizei getHeight(GLint level) const; GLsizei getHeight(GLint level) const;
GLenum getInternalFormat() const; GLenum getInternalFormat(GLint level) const;
D3DFORMAT getD3DFormat() const; D3DFORMAT getD3DFormat(GLint level) const;
bool isCompressed() const; bool isCompressed(GLint level) const;
void setImage(GLint level, GLsizei width, GLsizei height, GLenum format, GLenum type, GLint unpackAlignment, const void *pixels); void setImage(GLint level, GLsizei width, GLsizei height, GLenum format, GLenum type, GLint unpackAlignment, const void *pixels);
void setCompressedImage(GLint level, GLenum format, GLsizei width, GLsizei height, GLsizei imageSize, const void *pixels); void setCompressedImage(GLint level, GLenum format, GLsizei width, GLsizei height, GLsizei imageSize, const void *pixels);
......
...@@ -63,12 +63,12 @@ bool validateSubImageParams2D(bool compressed, GLsizei width, GLsizei height, ...@@ -63,12 +63,12 @@ bool validateSubImageParams2D(bool compressed, GLsizei width, GLsizei height,
return error(GL_INVALID_OPERATION, false); return error(GL_INVALID_OPERATION, false);
} }
if (compressed != texture->isCompressed()) if (compressed != texture->isCompressed(level))
{ {
return error(GL_INVALID_OPERATION, false); return error(GL_INVALID_OPERATION, false);
} }
if (format != GL_NONE && format != texture->getInternalFormat()) if (format != GL_NONE && format != texture->getInternalFormat(level))
{ {
return error(GL_INVALID_OPERATION, false); return error(GL_INVALID_OPERATION, false);
} }
...@@ -1404,7 +1404,7 @@ void __stdcall glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GL ...@@ -1404,7 +1404,7 @@ void __stdcall glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GL
{ {
return; // error already registered by validateSubImageParams return; // error already registered by validateSubImageParams
} }
textureFormat = tex2d->getInternalFormat(); textureFormat = tex2d->getInternalFormat(level);
texture = tex2d; texture = tex2d;
} }
else if (gl::IsCubemapTextureTarget(target)) else if (gl::IsCubemapTextureTarget(target))
...@@ -2362,7 +2362,7 @@ void __stdcall glFramebufferTexture2D(GLenum target, GLenum attachment, GLenum t ...@@ -2362,7 +2362,7 @@ void __stdcall glFramebufferTexture2D(GLenum target, GLenum attachment, GLenum t
return error(GL_INVALID_OPERATION); return error(GL_INVALID_OPERATION);
} }
gl::Texture2D *tex2d = static_cast<gl::Texture2D *>(tex); gl::Texture2D *tex2d = static_cast<gl::Texture2D *>(tex);
if (tex2d->isCompressed()) if (tex2d->isCompressed(0))
{ {
return error(GL_INVALID_OPERATION); return error(GL_INVALID_OPERATION);
} }
...@@ -2502,7 +2502,7 @@ void __stdcall glGenerateMipmap(GLenum target) ...@@ -2502,7 +2502,7 @@ void __stdcall glGenerateMipmap(GLenum target)
{ {
gl::Texture2D *tex2d = context->getTexture2D(); gl::Texture2D *tex2d = context->getTexture2D();
if (tex2d->isCompressed()) if (tex2d->isCompressed(0))
{ {
return error(GL_INVALID_OPERATION); return error(GL_INVALID_OPERATION);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment