Report errors for unsupported Depth/stencil texture operations

Trac #20875 Signed-off-by: Nicolas Capens git-svn-id: https://angleproject.googlecode.com/svn/trunk@1105 736b8ea6-26fd-11df-bfd4-992fa37f6226
parent 835a95a5
......@@ -2163,6 +2163,11 @@ bool Texture2D::isCompressed(GLint level) const
return IsCompressed(getInternalFormat(level));
}
bool Texture2D::isDepth(GLint level) const
{
return IsDepthTexture(getInternalFormat(level));
}
IDirect3DBaseTexture9 *Texture2D::getBaseTexture() const
{
return mTexStorage ? mTexStorage->getBaseTexture() : NULL;
......
......@@ -284,6 +284,7 @@ class Texture2D : public Texture
GLenum getInternalFormat(GLint level) const;
D3DFORMAT getD3DFormat(GLint level) const;
bool isCompressed(GLint level) const;
bool isDepth(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);
......
......@@ -1297,6 +1297,19 @@ void __stdcall glCopyTexImage2D(GLenum target, GLint level, GLenum internalforma
return error(GL_INVALID_ENUM);
}
break;
case GL_DEPTH_COMPONENT:
case GL_DEPTH_COMPONENT16:
case GL_DEPTH_COMPONENT32_OES:
case GL_DEPTH_STENCIL_OES:
case GL_DEPTH24_STENCIL8_OES:
if (context->supportsDepthTextures())
{
return error(GL_INVALID_OPERATION);
}
else
{
return error(GL_INVALID_ENUM);
}
default:
return error(GL_INVALID_ENUM);
}
......@@ -1461,6 +1474,9 @@ void __stdcall glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GL
case GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE:
case GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE:
return error(GL_INVALID_OPERATION);
case GL_DEPTH_COMPONENT:
case GL_DEPTH_STENCIL_OES:
return error(GL_INVALID_OPERATION);
default:
return error(GL_INVALID_OPERATION);
}
......@@ -2506,6 +2522,10 @@ void __stdcall glGenerateMipmap(GLenum target)
{
return error(GL_INVALID_OPERATION);
}
if (tex2d->isDepth(0))
{
return error(GL_INVALID_OPERATION);
}
tex2d->generateMipmaps();
break;
......@@ -5236,6 +5256,15 @@ void __stdcall glTexImage2D(GLenum target, GLint level, GLint internalformat, GL
{
return error(GL_INVALID_VALUE);
}
if (target != GL_TEXTURE_2D)
{
return error(GL_INVALID_OPERATION);
}
// OES_depth_texture supports loading depth data, but ANGLE_depth_texture does not
if (pixels != NULL)
{
return error(GL_INVALID_OPERATION);
}
break;
default:
break;
......@@ -5514,6 +5543,10 @@ void __stdcall glTexStorage2DEXT(GLenum target, GLsizei levels, GLenum internalf
{
return error(GL_INVALID_ENUM);
}
if (target != GL_TEXTURE_2D)
{
return error(GL_INVALID_OPERATION);
}
break;
default:
break;
......@@ -5624,6 +5657,12 @@ void __stdcall glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint
{
return error(GL_INVALID_ENUM);
}
if (target != GL_TEXTURE_2D)
{
return error(GL_INVALID_OPERATION);
}
// OES_depth_texture supports loading depth data, but ANGLE_depth_texture does not
return error(GL_INVALID_OPERATION);
}
if (target == GL_TEXTURE_2D)
......
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