diff options
author | Brian Paul <[email protected]> | 2011-04-06 14:16:57 -0600 |
---|---|---|
committer | Brian Paul <[email protected]> | 2011-04-06 16:52:48 -0600 |
commit | 7b8830d81d816c22d5930bec1f0f178cf0d138c6 (patch) | |
tree | b4fb38e18313a214bf95d7396faa951b80dc9b50 /src/mesa/main/varray.h | |
parent | de4cb19a1c3f166a2ffae3369aa95d3f81198b6b (diff) |
mesa: consolidate code in _mesa_update_array_max_element()
Diffstat (limited to 'src/mesa/main/varray.h')
-rw-r--r-- | src/mesa/main/varray.h | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/src/mesa/main/varray.h b/src/mesa/main/varray.h index 53e68c89667..1c423200ffd 100644 --- a/src/mesa/main/varray.h +++ b/src/mesa/main/varray.h @@ -34,6 +34,37 @@ struct gl_client_array; struct gl_context; + +/** + * Compute the index of the last array element that can be safely accessed in + * a vertex array. We can really only do this when the array lives in a VBO. + * The array->_MaxElement field will be updated. + * Later in glDrawArrays/Elements/etc we can do some bounds checking. + */ +static INLINE void +_mesa_update_array_max_element(struct gl_client_array *array) +{ + assert(array->Enabled); + + if (array->BufferObj->Name) { + GLsizeiptrARB offset = (GLsizeiptrARB) array->Ptr; + GLsizeiptrARB bufSize = (GLsizeiptrARB) array->BufferObj->Size; + + if (offset < bufSize) { + array->_MaxElement = (bufSize - offset + array->StrideB + - array->_ElementSize) / array->StrideB; + } + else { + array->_MaxElement = 0; + } + } + else { + /* user-space array, no idea how big it is */ + array->_MaxElement = 2 * 1000 * 1000 * 1000; /* just a big number */ + } +} + + #if _HAVE_FULL_GL extern void GLAPIENTRY |