mesa: move gl_array_attrib::_MaxElement to gl_array_object::_MaxElement

This value is per array object.
This commit is contained in:
Brian Paul
2009-05-14 13:24:24 -06:00
parent 899c524a49
commit a185bcbdec
4 changed files with 14 additions and 8 deletions
+4 -4
View File
@@ -182,10 +182,10 @@ _mesa_validate_DrawElements(GLcontext *ctx,
/* find max array index */
GLuint max = max_buffer_index(ctx, count, type, indices,
ctx->Array.ElementArrayBufferObj);
if (max >= ctx->Array._MaxElement) {
if (max >= ctx->Array.ArrayObj->_MaxElement) {
/* the max element is out of bounds of one or more enabled arrays */
_mesa_warning(ctx, "glDrawElements() index=%u is "
"out of bounds (max=%u)", max, ctx->Array._MaxElement);
"out of bounds (max=%u)", max, ctx->Array.ArrayObj->_MaxElement);
return GL_FALSE;
}
}
@@ -254,7 +254,7 @@ _mesa_validate_DrawRangeElements(GLcontext *ctx, GLenum mode,
if (ctx->Const.CheckArrayBounds) {
GLuint max = max_buffer_index(ctx, count, type, indices,
ctx->Array.ElementArrayBufferObj);
if (max >= ctx->Array._MaxElement) {
if (max >= ctx->Array.ArrayObj->_MaxElement) {
/* the max element is out of bounds of one or more enabled arrays */
return GL_FALSE;
}
@@ -293,7 +293,7 @@ _mesa_validate_DrawArrays(GLcontext *ctx,
return GL_FALSE;
if (ctx->Const.CheckArrayBounds) {
if (start + count > (GLint) ctx->Array._MaxElement)
if (start + count > (GLint) ctx->Array.ArrayObj->_MaxElement)
return GL_FALSE;
}
+6 -1
View File
@@ -1578,6 +1578,12 @@ struct gl_array_object
/** Mask of _NEW_ARRAY_* values indicating which arrays are enabled */
GLbitfield _Enabled;
/**
* Min of all enabled arrays' _MaxElement. When arrays reside inside VBOs
* we can determine the max legal (in bounds) glDrawElements array index.
*/
GLuint _MaxElement;
};
@@ -1602,7 +1608,6 @@ struct gl_array_attrib
struct gl_buffer_object *ArrayBufferObj;
struct gl_buffer_object *ElementArrayBufferObj;
#endif
GLuint _MaxElement; /* Min of all enabled array's maxes */
};
+1 -1
View File
@@ -206,7 +206,7 @@ update_arrays( GLcontext *ctx )
}
/* _MaxElement is one past the last legal array element */
ctx->Array._MaxElement = min;
arrayObj->_MaxElement = min;
}
+3 -2
View File
@@ -352,10 +352,11 @@ vbo_exec_DrawRangeElements(GLenum mode,
if (!_mesa_validate_DrawRangeElements( ctx, mode, start, end, count, type, indices ))
return;
if (end >= ctx->Array._MaxElement) {
if (end >= ctx->Array.ArrayObj->_MaxElement) {
/* the max element is out of bounds of one or more enabled arrays */
_mesa_warning(ctx, "glDraw[Range]Elements() index=%u is "
"out of bounds (max=%u)", end, ctx->Array._MaxElement);
"out of bounds (max=%u)", end,
ctx->Array.ArrayObj->_MaxElement);
return;
}