From: Carl Worth Date: Thu, 17 Oct 2013 21:52:21 +0000 (-0700) Subject: retrace: Implement glxCopySubBufferMESA X-Git-Url: https://git.cworth.org/git?p=apitrace;a=commitdiff_plain;h=refs%2Fheads%2Fglx-copy-sub-buffer retrace: Implement glxCopySubBufferMESA This enables replay of a trace captured on ChromeOS. Note: Replaying on EGL is not supported, (will trigger an abort), since, as far as I know, EGL does not provide an equivalent function. --- diff --git a/retrace/glretrace_glx.cpp b/retrace/glretrace_glx.cpp index 3179c1e..7efc3bf 100644 --- a/retrace/glretrace_glx.cpp +++ b/retrace/glretrace_glx.cpp @@ -111,6 +111,16 @@ static void retrace_glXDestroyContext(trace::Call &call) { delete context; } +static void retrace_glXCopySubBufferMESA(trace::Call &call) { + glws::Drawable *drawable = getDrawable(call.arg(1).toUInt()); + int x = call.arg(2).toSInt(); + int y = call.arg(3).toSInt(); + int width = call.arg(4).toSInt(); + int height = call.arg(5).toSInt(); + + drawable->copySubBuffer(x, y, width, height); +} + static void retrace_glXSwapBuffers(trace::Call &call) { glws::Drawable *drawable = getDrawable(call.arg(1).toUInt()); @@ -173,7 +183,7 @@ const retrace::Entry glretrace::glx_callbacks[] = { {"glXChooseVisual", &retrace::ignore}, //{"glXCopyContext", &retrace_glXCopyContext}, //{"glXCopyImageSubDataNV", &retrace_glXCopyImageSubDataNV}, - //{"glXCopySubBufferMESA", &retrace_glXCopySubBufferMESA}, + {"glXCopySubBufferMESA", &retrace_glXCopySubBufferMESA}, {"glXCreateContextAttribsARB", &retrace_glXCreateContextAttribsARB}, {"glXCreateContext", &retrace_glXCreateContext}, //{"glXCreateContextWithConfigSGIX", &retrace_glXCreateContextWithConfigSGIX}, diff --git a/retrace/glws.hpp b/retrace/glws.hpp index c76e193..a8b6844 100644 --- a/retrace/glws.hpp +++ b/retrace/glws.hpp @@ -127,6 +127,8 @@ public: visible = true; } + virtual void copySubBuffer(int x, int y, int width, int height) = 0; + virtual void swapBuffers(void) = 0; }; diff --git a/retrace/glws_egl_xlib.cpp b/retrace/glws_egl_xlib.cpp index 6bfc40d..7e86887 100644 --- a/retrace/glws_egl_xlib.cpp +++ b/retrace/glws_egl_xlib.cpp @@ -244,6 +244,11 @@ public: Drawable::show(); } + void copySubBuffer(int x, int y, int width, int height) { + printf("glws_egl_xlib:copySubBuffer: Not yet implemented\n"); + exit(1); + } + void swapBuffers(void) { eglBindAPI(api); eglSwapBuffers(eglDisplay, surface); diff --git a/retrace/glws_glx.cpp b/retrace/glws_glx.cpp index d150aa6..537ea3c 100644 --- a/retrace/glws_glx.cpp +++ b/retrace/glws_glx.cpp @@ -213,6 +213,12 @@ public: Drawable::show(); } + void copySubBuffer(int x, int y, int width, int height) { + glXCopySubBufferMESA(display, window, x, y, width, height); + + processKeys(); + } + void swapBuffers(void) { glXSwapBuffers(display, window);