diff options
author | Krzysztof Czurylo <[email protected]> | 2008-08-21 15:01:20 -0700 |
---|---|---|
committer | Ian Romanick <[email protected]> | 2008-08-21 15:01:59 -0700 |
commit | 6f4fd3a4322a3d7c63207999e08b07ba46b0fc66 (patch) | |
tree | 6cb97de72c1e91fdf20ffdd9998f925707c89da9 | |
parent | be30fddc7c6d0a75cf0777cf24591c3a6439e2c6 (diff) |
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.
-rw-r--r-- | src/mesa/main/enable.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/src/mesa/main/enable.c b/src/mesa/main/enable.c index 9fe979a6b2e..827d84765af 100644 --- a/src/mesa/main/enable.c +++ b/src/mesa/main/enable.c @@ -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) |