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
GLenum RenderbufferTexture2D::getInternalFormat() const
{
return mTexture2D->getInternalFormat();
return mTexture2D->getInternalFormat(0);
}
D3DFORMAT RenderbufferTexture2D::getD3DFormat() const
{
return mTexture2D->getD3DFormat();
return mTexture2D->getD3DFormat(0);
}
GLsizei RenderbufferTexture2D::getSamples() const
......
......@@ -1802,14 +1802,20 @@ GLsizei Texture2D::getHeight(GLint level) const
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)
......@@ -2093,8 +2099,8 @@ bool Texture2D::isSamplerComplete() const
default: UNREACHABLE();
}
if ((getInternalFormat() == GL_FLOAT && !getContext()->supportsFloat32LinearFilter()) ||
(getInternalFormat() == GL_HALF_FLOAT_OES && !getContext()->supportsFloat16LinearFilter()))
if ((getInternalFormat(0) == GL_FLOAT && !getContext()->supportsFloat32LinearFilter()) ||
(getInternalFormat(0) == GL_HALF_FLOAT_OES && !getContext()->supportsFloat16LinearFilter()))
{
if (mMagFilter != GL_NEAREST || (mMinFilter != GL_NEAREST && mMinFilter != GL_NEAREST_MIPMAP_NEAREST))
{
......@@ -2176,9 +2182,9 @@ bool Texture2D::isMipmapComplete() const
return true;
}
bool Texture2D::isCompressed() const
bool Texture2D::isCompressed(GLint level) const
{
return IsCompressed(getInternalFormat());
return IsCompressed(getInternalFormat(level));
}
IDirect3DBaseTexture9 *Texture2D::getBaseTexture() const
......
......@@ -281,9 +281,9 @@ class Texture2D : public Texture
GLsizei getWidth(GLint level) const;
GLsizei getHeight(GLint level) const;
GLenum getInternalFormat() const;
D3DFORMAT getD3DFormat() const;
bool isCompressed() const;
GLenum getInternalFormat(GLint level) const;
D3DFORMAT getD3DFormat(GLint level) const;
bool isCompressed(GLint level) const;
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);
......
......@@ -63,12 +63,12 @@ bool validateSubImageParams2D(bool compressed, GLsizei width, GLsizei height,
return error(GL_INVALID_OPERATION, false);
}
if (compressed != texture->isCompressed())
if (compressed != texture->isCompressed(level))
{
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);
}
......@@ -1404,7 +1404,7 @@ void __stdcall glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GL
{
return; // error already registered by validateSubImageParams
}
textureFormat = tex2d->getInternalFormat();
textureFormat = tex2d->getInternalFormat(level);
texture = tex2d;
}
else if (gl::IsCubemapTextureTarget(target))
......@@ -2362,7 +2362,7 @@ void __stdcall glFramebufferTexture2D(GLenum target, GLenum attachment, GLenum t
return error(GL_INVALID_OPERATION);
}
gl::Texture2D *tex2d = static_cast<gl::Texture2D *>(tex);
if (tex2d->isCompressed())
if (tex2d->isCompressed(0))
{
return error(GL_INVALID_OPERATION);
}
......@@ -2502,7 +2502,7 @@ void __stdcall glGenerateMipmap(GLenum target)
{
gl::Texture2D *tex2d = context->getTexture2D();
if (tex2d->isCompressed())
if (tex2d->isCompressed(0))
{
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