From ac5285bdd7fde00f9d35810ac5cde555dc4fbdf1 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jos=C3=A9=20Fonseca?= Date: Wed, 4 May 2011 11:09:08 +0100 Subject: [PATCH] Cleanup arrays pointer handling code. --- glretrace.py | 20 ++++++----- gltrace.py | 96 +++++++++++++++++++++++++--------------------------- 2 files changed, 57 insertions(+), 59 deletions(-) diff --git a/glretrace.py b/glretrace.py index b3c8934..72931b5 100644 --- a/glretrace.py +++ b/glretrace.py @@ -49,18 +49,20 @@ class GlRetracer(Retracer): "glInterleavedArrays", - #"glVertexPointerEXT", - #"glNormalPointerEXT", - #"glColorPointerEXT", - #"glIndexPointerEXT", - #"glTexCoordPointerEXT", - #"glEdgeFlagPointerEXT", - #"glFogCoordPointerEXT", - #"glSecondaryColorPointerEXT", + "glVertexPointerEXT", + "glNormalPointerEXT", + "glColorPointerEXT", + "glIndexPointerEXT", + "glTexCoordPointerEXT", + "glEdgeFlagPointerEXT", + "glFogCoordPointerEXT", + "glSecondaryColorPointerEXT", "glVertexAttribPointer", "glVertexAttribPointerARB", "glVertexAttribPointerNV", + "glVertexAttribIPointer", + "glVertexAttribIPointerEXT", "glVertexAttribLPointer", "glVertexAttribLPointerEXT", @@ -153,7 +155,7 @@ class GlRetracer(Retracer): def extract_arg(self, function, arg, arg_type, lvalue, rvalue): if function.name in self.array_pointer_function_names and arg.name == 'pointer': - print ' %s = %s.blob();' % (lvalue, rvalue) + print ' %s = static_cast<%s>(%s.blob());' % (lvalue, arg_type, rvalue) return if function.name in self.draw_elements_function_names and arg.name == 'indices': diff --git a/gltrace.py b/gltrace.py index 0025e9c..2dee18d 100644 --- a/gltrace.py +++ b/gltrace.py @@ -216,7 +216,6 @@ class GlTracer(Tracer): print '}' print - array_pointer_function_names = set(( "glVertexPointer", "glNormalPointer", @@ -227,6 +226,8 @@ class GlTracer(Tracer): "glFogCoordPointer", "glSecondaryColorPointer", + "glInterleavedArrays", + "glVertexPointerEXT", "glNormalPointerEXT", "glColorPointerEXT", @@ -239,6 +240,8 @@ class GlTracer(Tracer): "glVertexAttribPointer", "glVertexAttribPointerARB", "glVertexAttribPointerNV", + "glVertexAttribIPointer", + "glVertexAttribIPointerEXT", "glVertexAttribLPointer", "glVertexAttribLPointerEXT", @@ -278,6 +281,48 @@ class GlTracer(Tracer): print ' if (!__array_buffer) {' print ' __user_arrays = true;' self.dispatch_function(function) + + # And also break down glInterleavedArrays into the individual calls + if function.name == 'glInterleavedArrays': + print + + # Initialize the enable flags + for camelcase_name, uppercase_name in self.arrays: + flag_name = '__' + uppercase_name.lower() + print ' GLboolean %s = GL_FALSE;' % flag_name + print + + # Switch for the interleaved formats + print ' switch (format) {' + for format in self.interleaved_formats: + print ' case %s:' % format + for camelcase_name, uppercase_name in self.arrays: + flag_name = '__' + uppercase_name.lower() + if format.find('_' + uppercase_name[0]) >= 0: + print ' %s = GL_TRUE;' % flag_name + print ' break;' + print ' default:' + print ' return;' + print ' }' + print + + # Emit fake glEnableClientState/glDisableClientState flags + for camelcase_name, uppercase_name in self.arrays: + flag_name = '__' + uppercase_name.lower() + enable_name = 'GL_%s_ARRAY' % uppercase_name + + # Emit a fake function + print ' {' + print ' static const Trace::FunctionSig &__sig = %s ? __glEnableClientState_sig : __glDisableClientState_sig;' % flag_name + print ' unsigned __call = Trace::BeginEnter(__sig);' + print ' Trace::BeginArg(0);' + dump_instance(glapi.GLenum, enable_name) + print ' Trace::EndArg();' + print ' Trace::EndEnter();' + print ' Trace::BeginLeave(__call);' + print ' Trace::EndLeave();' + print ' }' + print ' return;' print ' }' @@ -289,55 +334,6 @@ class GlTracer(Tracer): print ' __trace_user_arrays(maxindex);' print ' }' - # And also break down glInterleavedArrays into the individual calls - if function.name == 'glInterleavedArrays': - print ' GLint __array_buffer = 0;' - print ' __glGetIntegerv(GL_ARRAY_BUFFER_BINDING, &__array_buffer);' - print ' if (!__array_buffer) {' - print ' __user_arrays = true;' - self.dispatch_function(function) - print - - # Initialize the enable flags - for camelcase_name, uppercase_name in self.arrays: - flag_name = '__' + uppercase_name.lower() - print ' GLboolean %s = GL_FALSE;' % flag_name - print - - # Swicth for the interleaved formats - print ' switch (format) {' - for format in self.interleaved_formats: - print ' case %s:' % format - for camelcase_name, uppercase_name in self.arrays: - flag_name = '__' + uppercase_name.lower() - if format.find('_' + uppercase_name[0]) >= 0: - print ' %s = GL_TRUE;' % flag_name - print ' break;' - print ' default:' - print ' return;' - print ' }' - print - - # Emit fake glEnableClientState/glDisableClientState flags - for camelcase_name, uppercase_name in self.arrays: - flag_name = '__' + uppercase_name.lower() - enable_name = 'GL_%s_ARRAY' % uppercase_name - - # Emit a fake function - print ' {' - print ' static const Trace::FunctionSig &__sig = %s ? __glEnableClientState_sig : __glDisableClientState_sig;' % flag_name - print ' unsigned __call = Trace::BeginEnter(__sig);' - print ' Trace::BeginArg(0);' - dump_instance(glapi.GLenum, enable_name) - print ' Trace::EndArg();' - print ' Trace::EndEnter();' - print ' Trace::BeginLeave(__call);' - print ' Trace::EndLeave();' - print ' }' - - print ' return;' - print ' }' - # Emit a fake memcpy on if function.name in ('glUnmapBuffer', 'glUnmapBufferARB'): print ' struct buffer_mapping *mapping = get_buffer_mapping(target);' -- 2.45.2