Call _ae_update_state when array enable state changes
Basically, the application enables client vertex and color arrays, renders something, then disables color array, and renders something else (using vertex array only). Even though the color array is disabled (and the pointer is no longer valid), the driver still tries to read color data from this array (which results in an exception). This is because enabling/disabling array does not trigger _ae_update_state() and the list of enabled arrays is not updated. _ae_update_state() it's called on the first state validation only (as all the "dirty" flags are set at the beginning). Any further change to client arrays' state has no effect.
This commit is contained in:
committed by
Ian Romanick
parent
be30fddc7c
commit
6f4fd3a432
@@ -38,6 +38,7 @@
|
||||
#include "enums.h"
|
||||
#include "math/m_matrix.h"
|
||||
#include "math/m_xform.h"
|
||||
#include "api_arrayelt.h"
|
||||
|
||||
|
||||
|
||||
@@ -129,6 +130,9 @@ client_state(GLcontext *ctx, GLenum cap, GLboolean state)
|
||||
|
||||
FLUSH_VERTICES(ctx, _NEW_ARRAY);
|
||||
ctx->Array.NewState |= flag;
|
||||
|
||||
_ae_invalidate_state(ctx, _NEW_ARRAY);
|
||||
|
||||
*var = state;
|
||||
|
||||
if (state)
|
||||
|
||||
Reference in New Issue
Block a user