mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-28 22:40:24 +01:00
mesa: Use _mesa_array_element in dlist save.
Make use of the newly factored out _mesa_array_element function in display list compilation. For now that duplicates out the primitive restart logic. But that turns out to need a fix in display list handling anyhow. Reviewed-by: Brian Paul <brianp@vmware.com> Signed-off-by: Mathias Fröhlich <Mathias.Froehlich@web.de>
This commit is contained in:
parent
80e319485a
commit
b43fae364f
1 changed files with 19 additions and 4 deletions
|
|
@ -1330,7 +1330,7 @@ _save_OBE_DrawArrays(GLenum mode, GLint start, GLsizei count)
|
|||
vbo_save_NotifyBegin(ctx, mode, true);
|
||||
|
||||
for (i = 0; i < count; i++)
|
||||
CALL_ArrayElement(GET_DISPATCH(), (start + i));
|
||||
_mesa_array_element(ctx, GET_DISPATCH(), start + i);
|
||||
CALL_End(GET_DISPATCH(), ());
|
||||
|
||||
_ae_unmap_vbos(ctx);
|
||||
|
|
@ -1371,6 +1371,21 @@ _save_OBE_MultiDrawArrays(GLenum mode, const GLint *first,
|
|||
}
|
||||
|
||||
|
||||
static void
|
||||
array_element(struct gl_context *ctx, struct _glapi_table *disp, GLuint elt)
|
||||
{
|
||||
/* If PrimitiveRestart is enabled and the index is the RestartIndex
|
||||
* then we call PrimitiveRestartNV and return.
|
||||
*/
|
||||
if (ctx->Array.PrimitiveRestart && elt == ctx->Array.RestartIndex) {
|
||||
CALL_PrimitiveRestartNV(disp, ());
|
||||
return;
|
||||
}
|
||||
|
||||
_mesa_array_element(ctx, disp, elt);
|
||||
}
|
||||
|
||||
|
||||
/* Could do better by copying the arrays and element list intact and
|
||||
* then emitting an indexed prim at runtime.
|
||||
*/
|
||||
|
|
@ -1415,15 +1430,15 @@ _save_OBE_DrawElementsBaseVertex(GLenum mode, GLsizei count, GLenum type,
|
|||
switch (type) {
|
||||
case GL_UNSIGNED_BYTE:
|
||||
for (i = 0; i < count; i++)
|
||||
CALL_ArrayElement(GET_DISPATCH(), (basevertex + ((GLubyte *) indices)[i]));
|
||||
array_element(ctx, GET_DISPATCH(), (basevertex + ((GLubyte *) indices)[i]));
|
||||
break;
|
||||
case GL_UNSIGNED_SHORT:
|
||||
for (i = 0; i < count; i++)
|
||||
CALL_ArrayElement(GET_DISPATCH(), (basevertex + ((GLushort *) indices)[i]));
|
||||
array_element(ctx, GET_DISPATCH(), (basevertex + ((GLushort *) indices)[i]));
|
||||
break;
|
||||
case GL_UNSIGNED_INT:
|
||||
for (i = 0; i < count; i++)
|
||||
CALL_ArrayElement(GET_DISPATCH(), (basevertex + ((GLuint *) indices)[i]));
|
||||
array_element(ctx, GET_DISPATCH(), (basevertex + ((GLuint *) indices)[i]));
|
||||
break;
|
||||
default:
|
||||
_mesa_error(ctx, GL_INVALID_ENUM, "glDrawElements(type)");
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue