summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKrzysztof Czurylo <krzysztof.czurylo@intel.com>2008-08-21 15:01:20 -0700
committerIan Romanick <ian.d.romanick@intel.com>2008-08-21 15:01:59 -0700
commit6f4fd3a4322a3d7c63207999e08b07ba46b0fc66 (patch)
tree6cb97de72c1e91fdf20ffdd9998f925707c89da9
parentbe30fddc7c6d0a75cf0777cf24591c3a6439e2c6 (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.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/mesa/main/enable.c b/src/mesa/main/enable.c
index 9fe979a6b2..827d84765a 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)