mesa: EXT_vertex_array_bgra fixes

1) Pass the correct format when calling update_array in
   _mesa_VertexAttribPointerARB.
2) glVertexAttribPointerNV accepts GL_BGRA format too.
3) raise INVALID_VALUE error when format is BGRA and normalized is
   false in glVertexAttribPointerARB
This commit is contained in:
Maciej Cencora 2009-06-08 07:23:56 -06:00 committed by Brian Paul
parent 8d2324d355
commit 4adb190a16

View file

@ -529,6 +529,7 @@ _mesa_VertexAttribPointerNV(GLuint index, GLint size, GLenum type,
{
GLboolean normalized = GL_FALSE;
GLsizei elementSize;
GLenum format;
GET_CURRENT_CONTEXT(ctx);
ASSERT_OUTSIDE_BEGIN_END(ctx);
@ -552,6 +553,21 @@ _mesa_VertexAttribPointerNV(GLuint index, GLint size, GLenum type,
return;
}
if (size == GL_BGRA) {
if (type != GL_UNSIGNED_BYTE) {
_mesa_error(ctx, GL_INVALID_VALUE,
"glVertexAttribPointerNV(GL_BGRA/type)");
return;
}
format = GL_BGRA;
size = 4;
normalized = GL_TRUE;
}
else {
format = GL_RGBA;
}
/* check for valid 'type' and compute StrideB right away */
switch (type) {
case GL_UNSIGNED_BYTE:
@ -574,7 +590,7 @@ _mesa_VertexAttribPointerNV(GLuint index, GLint size, GLenum type,
update_array(ctx, &ctx->Array.ArrayObj->VertexAttrib[index],
_NEW_ARRAY_ATTRIB(index),
elementSize, size, type, GL_RGBA, stride, normalized, ptr);
elementSize, size, type, format, stride, normalized, ptr);
if (ctx->Driver.VertexAttribPointer)
ctx->Driver.VertexAttribPointer( ctx, index, size, type, stride, ptr );
@ -621,9 +637,14 @@ _mesa_VertexAttribPointerARB(GLuint index, GLint size, GLenum type,
"glVertexAttribPointerARB(GL_BGRA/type)");
return;
}
if (normalized != GL_TRUE) {
_mesa_error(ctx, GL_INVALID_VALUE,
"glVertexAttribPointerARB(GL_BGRA/normalized)");
return;
}
format = GL_BGRA;
size = 4;
normalized = GL_TRUE;
}
else {
format = GL_RGBA;
@ -668,7 +689,7 @@ _mesa_VertexAttribPointerARB(GLuint index, GLint size, GLenum type,
update_array(ctx, &ctx->Array.ArrayObj->VertexAttrib[index],
_NEW_ARRAY_ATTRIB(index),
elementSize, size, type, GL_RGBA, stride, normalized, ptr);
elementSize, size, type, format, stride, normalized, ptr);
if (ctx->Driver.VertexAttribPointer)
ctx->Driver.VertexAttribPointer(ctx, index, size, type, stride, ptr);