From 694dc0b60e2e0f5002c11c9980b59b428125beb1 Mon Sep 17 00:00:00 2001
From: =?utf8?q?Jos=C3=A9=20Fonseca?= <jose.r.fonseca@gmail.com>
Date: Thu, 1 Mar 2012 15:44:07 +0000
Subject: [PATCH] Get the buffer map pointer _before_ unmaping.

And therefore actually call delRegionByPointer()
---
 glretrace.py | 35 +++++++++++++++++++----------------
 1 file changed, 19 insertions(+), 16 deletions(-)

diff --git a/glretrace.py b/glretrace.py
index 8dfc340..28d8d74 100644
--- a/glretrace.py
+++ b/glretrace.py
@@ -237,6 +237,25 @@ class GlRetracer(Retracer):
 
         if function.name == 'memcpy':
             print '    if (!dest || !src || !n) return;'
+
+        # Destroy the buffer mapping
+        if function.name in self.unmap_function_names:
+            print r'        GLvoid *ptr = NULL;'
+            if function.name == 'glUnmapBuffer':
+                print r'            glGetBufferPointerv(target, GL_BUFFER_MAP_POINTER, &ptr);'
+            elif function.name == 'glUnmapBufferARB':
+                print r'            glGetBufferPointervARB(target, GL_BUFFER_MAP_POINTER_ARB, &ptr);'
+            elif function.name == 'glUnmapBufferOES':
+                print r'            glGetBufferPointervOES(target, GL_BUFFER_MAP_POINTER_OES, &ptr);'
+            elif function.name == 'glUnmapNamedBufferEXT':
+                print r'            glGetNamedBufferPointervEXT(buffer, GL_BUFFER_MAP_POINTER, &ptr);'
+            else:
+                assert False
+            print r'        if (ptr) {'
+            print r'            retrace::delRegionByPointer(ptr);'
+            print r'        } else {'
+            print r'            retrace::warning(call) << "no current context\n";'
+            print r'        }'
         
         Retracer.invokeFunction(self, function)
 
@@ -330,22 +349,6 @@ class GlRetracer(Retracer):
                         print r'    glGetNamedBufferParameterivEXT(buffer, GL_BUFFER_SIZE, &length);'
                     else:
                         assert False
-            # Destroy the buffer mapping
-            if function.name in self.unmap_function_names:
-                print r'        GLvoid *ptr = NULL;'
-                if function.name == 'glUnmapBuffer':
-                    print r'            glGetBufferPointerv(target, GL_BUFFER_MAP_POINTER, &ptr);'
-                elif function.name == 'glUnmapBufferARB':
-                    print r'            glGetBufferPointervARB(target, GL_BUFFER_MAP_POINTER_ARB, &ptr);'
-                elif function.name == 'glUnmapBufferOES':
-                    print r'            glGetBufferPointervOES(target, GL_BUFFER_MAP_POINTER_OES, &ptr);'
-                elif function.name == 'glUnmapNamedBufferEXT':
-                    print r'            glGetNamedBufferPointervEXT(buffer, GL_BUFFER_MAP_POINTER, &ptr);'
-                else:
-                    assert False
-                print r'        if (ptr) {'
-                print r'            retrace::delRegionByPointer(ptr);'
-                print r'        }'
 
     def extractArg(self, function, arg, arg_type, lvalue, rvalue):
         if function.name in self.array_pointer_function_names and arg.name == 'pointer':
-- 
2.45.2