better error checking related to YCbCr images
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
/* $Id: teximage.c,v 1.117 2002/09/27 02:45:38 brianp Exp $ */
|
||||
/* $Id: teximage.c,v 1.118 2002/10/02 17:25:05 brianp Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
@@ -959,6 +959,24 @@ texture_error_check( GLcontext *ctx, GLenum target,
|
||||
_mesa_error(ctx, GL_INVALID_ENUM, message);
|
||||
return GL_TRUE; /* error */
|
||||
}
|
||||
if (target != GL_TEXTURE_2D &&
|
||||
target != GL_PROXY_TEXTURE_2D &&
|
||||
target != GL_TEXTURE_RECTANGLE_NV &&
|
||||
target != GL_PROXY_TEXTURE_RECTANGLE_NV) {
|
||||
if (!isProxy)
|
||||
_mesa_error(ctx, GL_INVALID_ENUM, "glTexImage(target)");
|
||||
return GL_TRUE;
|
||||
}
|
||||
if (border != 0) {
|
||||
if (!isProxy) {
|
||||
char message[100];
|
||||
sprintf(message,
|
||||
"glTexImage%d(format=GL_YCBCR_MESA and border=%d)",
|
||||
dimensions, border);
|
||||
_mesa_error(ctx, GL_INVALID_VALUE, message);
|
||||
}
|
||||
return GL_TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
if (is_compressed_format(internalFormat)) {
|
||||
@@ -1011,36 +1029,40 @@ subtexture_error_check( GLcontext *ctx, GLuint dimensions,
|
||||
GLint maxLevels = 0;
|
||||
|
||||
if (dimensions == 1) {
|
||||
if (target != GL_TEXTURE_1D) {
|
||||
if (target == GL_TEXTURE_1D) {
|
||||
maxLevels = ctx->Const.MaxTextureLevels;
|
||||
}
|
||||
else {
|
||||
_mesa_error( ctx, GL_INVALID_ENUM, "glTexSubImage1D(target)" );
|
||||
return GL_TRUE;
|
||||
}
|
||||
maxLevels = ctx->Const.MaxTextureLevels;
|
||||
}
|
||||
else if (dimensions == 2) {
|
||||
if (ctx->Extensions.ARB_texture_cube_map) {
|
||||
if ((target < GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB ||
|
||||
target > GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB) &&
|
||||
target != GL_TEXTURE_2D) {
|
||||
_mesa_error( ctx, GL_INVALID_ENUM, "glTexSubImage2D(target)" );
|
||||
return GL_TRUE;
|
||||
}
|
||||
if (ctx->Extensions.ARB_texture_cube_map &&
|
||||
target >= GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB &&
|
||||
target <=GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB) {
|
||||
maxLevels = ctx->Const.MaxCubeTextureLevels;
|
||||
}
|
||||
else if (target != GL_TEXTURE_2D) {
|
||||
else if (ctx->Extensions.NV_texture_rectangle &&
|
||||
target == GL_TEXTURE_RECTANGLE_NV) {
|
||||
maxLevels = 1;
|
||||
}
|
||||
else if (target == GL_TEXTURE_2D) {
|
||||
maxLevels = ctx->Const.MaxTextureLevels;
|
||||
}
|
||||
else {
|
||||
_mesa_error( ctx, GL_INVALID_ENUM, "glTexSubImage2D(target)" );
|
||||
return GL_TRUE;
|
||||
}
|
||||
if (target == GL_PROXY_TEXTURE_2D && target == GL_TEXTURE_2D)
|
||||
maxLevels = ctx->Const.MaxTextureLevels;
|
||||
else
|
||||
maxLevels = ctx->Const.MaxCubeTextureLevels;
|
||||
}
|
||||
else if (dimensions == 3) {
|
||||
if (target != GL_TEXTURE_3D) {
|
||||
if (target == GL_TEXTURE_3D) {
|
||||
maxLevels = ctx->Const.Max3DTextureLevels;
|
||||
}
|
||||
else {
|
||||
_mesa_error( ctx, GL_INVALID_ENUM, "glTexSubImage3D(target)" );
|
||||
return GL_TRUE;
|
||||
}
|
||||
maxLevels = ctx->Const.Max3DTextureLevels;
|
||||
}
|
||||
else {
|
||||
_mesa_problem( ctx, "bad dims in texture_error_check" );
|
||||
@@ -1401,6 +1423,11 @@ copytexsubimage_error_check( GLcontext *ctx, GLuint dimensions,
|
||||
}
|
||||
}
|
||||
|
||||
if (teximage->IntFormat == GL_YCBCR_MESA) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION, "glCopyTexSubImage2D");
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
/* if we get here, the parameters are OK */
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
Reference in New Issue
Block a user