[PATCH 02/10] Add tracer_context as the tracer's context

Chia-I Wu olvaffe at gmail.com
Tue Nov 8 14:13:12 PST 2011


For now, it is just a static struct replacing __user_arrays*.  Later, we can
add more fields to cache more GL states (e.g. is there a PBO bound?), support
multiple contexts, and etc.
---
 gltrace.py |   31 +++++++++++++++++++++----------
 1 files changed, 21 insertions(+), 10 deletions(-)

diff --git a/gltrace.py b/gltrace.py
index e4dea6e..c79b109 100644
--- a/gltrace.py
+++ b/gltrace.py
@@ -109,10 +109,11 @@ class GlTracer(Tracer):
 
         print '#include "gltrace.hpp"'
         print
-        print '// Whether user arrays were used'
-        print 'static bool __user_arrays = false;'
-        print 'static bool __user_arrays_arb = false;'
-        print 'static bool __user_arrays_nv = false;'
+        print 'struct tracer_context {'
+        print '    bool user_arrays;'
+        print '    bool user_arrays_arb;'
+        print '    bool user_arrays_nv;'
+        print '};'
         print
         
         # Which glVertexAttrib* variant to use
@@ -122,12 +123,20 @@ class GlTracer(Tracer):
         print '    VERTEX_ATTRIB_NV,'
         print '};'
         print
+        print 'static tracer_context *__get_context(void)'
+        print '{'
+        print '    // TODO return the context set by other APIs (GLX, EGL, and etc.)'
+        print '    static tracer_context __ctx = { false, false, false };'
+        print '    return &__ctx;'
+        print '}'
+        print
         print 'static vertex_attrib __get_vertex_attrib(void) {'
-        print '    if (__user_arrays_arb || __user_arrays_nv) {'
+        print '    tracer_context *ctx = __get_context();'
+        print '    if (ctx->user_arrays_arb || ctx->user_arrays_nv) {'
         print '        GLboolean __vertex_program = GL_FALSE;'
         print '        __glGetBooleanv(GL_VERTEX_PROGRAM_ARB, &__vertex_program);'
         print '        if (__vertex_program) {'
-        print '            if (__user_arrays_nv) {'
+        print '            if (ctx->user_arrays_nv) {'
         print '                GLint __vertex_program_binding_nv = 0;'
         print '                __glGetIntegerv(GL_VERTEX_PROGRAM_BINDING_NV, &__vertex_program_binding_nv);'
         print '                if (__vertex_program_binding_nv) {'
@@ -144,7 +153,8 @@ class GlTracer(Tracer):
         # Whether we need user arrays
         print 'static inline bool __need_user_arrays(void)'
         print '{'
-        print '    if (!__user_arrays) {'
+        print '    tracer_context *ctx = __get_context();'
+        print '    if (!ctx->user_arrays) {'
         print '        return false;'
         print '    }'
         print
@@ -373,11 +383,12 @@ class GlTracer(Tracer):
             print '    GLint __array_buffer = 0;'
             print '    __glGetIntegerv(GL_ARRAY_BUFFER_BINDING, &__array_buffer);'
             print '    if (!__array_buffer) {'
-            print '        __user_arrays = true;'
+            print '        tracer_context *ctx = __get_context();'
+            print '        ctx->user_arrays = true;'
             if function.name == "glVertexAttribPointerARB":
-                print '        __user_arrays_arb = true;'
+                print '        ctx->user_arrays_arb = true;'
             if function.name == "glVertexAttribPointerNV":
-                print '        __user_arrays_nv = true;'
+                print '        ctx->user_arrays_nv = true;'
             self.dispatch_function(function)
 
             # And also break down glInterleavedArrays into the individual calls
-- 
1.7.6.3



More information about the apitrace mailing list