1 /**************************************************************************
3 * Copyright 2011 Jose Fonseca
6 * Permission is hereby granted, free of charge, to any person obtaining a copy
7 * of this software and associated documentation files (the "Software"), to deal
8 * in the Software without restriction, including without limitation the rights
9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 * copies of the Software, and to permit persons to whom the Software is
11 * furnished to do so, subject to the following conditions:
13 * The above copyright notice and this permission notice shall be included in
14 * all copies or substantial portions of the Software.
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24 **************************************************************************/
28 #include "retrace.hpp"
29 #include "glretrace.hpp"
32 using namespace glretrace;
35 static void retrace_glXChooseVisual(Trace::Call &call) {
38 static void retrace_glXCreateContext(Trace::Call &call) {
41 static void retrace_glXDestroyContext(Trace::Call &call) {
44 static void retrace_glXMakeCurrent(Trace::Call &call) {
47 frame_complete(call.no);
51 static void retrace_glXCopyContext(Trace::Call &call) {
54 static void retrace_glXSwapBuffers(Trace::Call &call) {
55 frame_complete(call.no);
57 drawable->swapBuffers();
63 static void retrace_glXCreateGLXPixmap(Trace::Call &call) {
66 static void retrace_glXDestroyGLXPixmap(Trace::Call &call) {
69 static void retrace_glXQueryExtension(Trace::Call &call) {
72 static void retrace_glXQueryVersion(Trace::Call &call) {
75 static void retrace_glXIsDirect(Trace::Call &call) {
78 static void retrace_glXGetConfig(Trace::Call &call) {
81 static void retrace_glXWaitGL(Trace::Call &call) {
84 static void retrace_glXWaitX(Trace::Call &call) {
87 static void retrace_glXUseXFont(Trace::Call &call) {
90 static void retrace_glXQueryExtensionsString(Trace::Call &call) {
93 static void retrace_glXQueryServerString(Trace::Call &call) {
96 static void retrace_glXGetClientString(Trace::Call &call) {
99 static void retrace_glXChooseFBConfig(Trace::Call &call) {
102 static void retrace_glXGetFBConfigAttrib(Trace::Call &call) {
105 static void retrace_glXGetFBConfigs(Trace::Call &call) {
108 static void retrace_glXGetVisualFromFBConfig(Trace::Call &call) {
111 static void retrace_glXCreateWindow(Trace::Call &call) {
114 static void retrace_glXDestroyWindow(Trace::Call &call) {
117 static void retrace_glXCreatePixmap(Trace::Call &call) {
120 static void retrace_glXDestroyPixmap(Trace::Call &call) {
123 static void retrace_glXCreatePbuffer(Trace::Call &call) {
126 static void retrace_glXDestroyPbuffer(Trace::Call &call) {
129 static void retrace_glXQueryDrawable(Trace::Call &call) {
132 static void retrace_glXCreateNewContext(Trace::Call &call) {
135 static void retrace_glXMakeContextCurrent(Trace::Call &call) {
138 static void retrace_glXGetCurrentReadDrawable(Trace::Call &call) {
141 static void retrace_glXQueryContext(Trace::Call &call) {
144 static void retrace_glXSelectEvent(Trace::Call &call) {
147 static void retrace_glXGetSelectedEvent(Trace::Call &call) {
150 static void retrace_glXGetProcAddressARB(Trace::Call &call) {
153 static void retrace_glXGetProcAddress(Trace::Call &call) {
156 void glretrace::retrace_call_glx(Trace::Call &call) {
157 const char *name = call.name().c_str();
173 if (name[10] == 'B' && name[11] == 'C' && name[12] == 'o' && name[13] == 'n' && name[14] == 'f' && name[15] == 'i' && name[16] == 'g' && name[17] == '\0') {
175 retrace_glXChooseFBConfig(call);
180 if (name[10] == 'i' && name[11] == 's' && name[12] == 'u' && name[13] == 'a' && name[14] == 'l' && name[15] == '\0') {
182 retrace_glXChooseVisual(call);
197 if (name[5] == 'p' && name[6] == 'y' && name[7] == 'C' && name[8] == 'o' && name[9] == 'n' && name[10] == 't' && name[11] == 'e' && name[12] == 'x' && name[13] == 't' && name[14] == '\0') {
199 retrace_glXCopyContext(call);
214 if (name[10] == 'o' && name[11] == 'n' && name[12] == 't' && name[13] == 'e' && name[14] == 'x' && name[15] == 't' && name[16] == '\0') {
216 retrace_glXCreateContext(call);
221 if (name[10] == 'L' && name[11] == 'X' && name[12] == 'P' && name[13] == 'i' && name[14] == 'x' && name[15] == 'm' && name[16] == 'a' && name[17] == 'p' && name[18] == '\0') {
222 // glXCreateGLXPixmap
223 retrace_glXCreateGLXPixmap(call);
228 if (name[10] == 'e' && name[11] == 'w' && name[12] == 'C' && name[13] == 'o' && name[14] == 'n' && name[15] == 't' && name[16] == 'e' && name[17] == 'x' && name[18] == 't' && name[19] == '\0') {
229 // glXCreateNewContext
230 retrace_glXCreateNewContext(call);
237 if (name[11] == 'u' && name[12] == 'f' && name[13] == 'f' && name[14] == 'e' && name[15] == 'r' && name[16] == '\0') {
239 retrace_glXCreatePbuffer(call);
244 if (name[11] == 'x' && name[12] == 'm' && name[13] == 'a' && name[14] == 'p' && name[15] == '\0') {
246 retrace_glXCreatePixmap(call);
253 if (name[10] == 'i' && name[11] == 'n' && name[12] == 'd' && name[13] == 'o' && name[14] == 'w' && name[15] == '\0') {
255 retrace_glXCreateWindow(call);
286 if (name[11] == 'o' && name[12] == 'n' && name[13] == 't' && name[14] == 'e' && name[15] == 'x' && name[16] == 't' && name[17] == '\0') {
288 retrace_glXDestroyContext(call);
293 if (name[11] == 'L' && name[12] == 'X' && name[13] == 'P' && name[14] == 'i' && name[15] == 'x' && name[16] == 'm' && name[17] == 'a' && name[18] == 'p' && name[19] == '\0') {
294 // glXDestroyGLXPixmap
295 retrace_glXDestroyGLXPixmap(call);
302 if (name[12] == 'u' && name[13] == 'f' && name[14] == 'f' && name[15] == 'e' && name[16] == 'r' && name[17] == '\0') {
304 retrace_glXDestroyPbuffer(call);
309 if (name[12] == 'x' && name[13] == 'm' && name[14] == 'a' && name[15] == 'p' && name[16] == '\0') {
311 retrace_glXDestroyPixmap(call);
318 if (name[11] == 'i' && name[12] == 'n' && name[13] == 'd' && name[14] == 'o' && name[15] == 'w' && name[16] == '\0') {
320 retrace_glXDestroyWindow(call);
347 if (name[8] == 'i' && name[9] == 'e' && name[10] == 'n' && name[11] == 't' && name[12] == 'S' && name[13] == 't' && name[14] == 'r' && name[15] == 'i' && name[16] == 'n' && name[17] == 'g' && name[18] == '\0') {
348 // glXGetClientString
349 retrace_glXGetClientString(call);
354 if (name[8] == 'n' && name[9] == 'f' && name[10] == 'i' && name[11] == 'g' && name[12] == '\0') {
356 retrace_glXGetConfig(call);
373 if (name[14] == 'o' && name[15] == 'n' && name[16] == 't' && name[17] == 'e' && name[18] == 'x' && name[19] == 't' && name[20] == '\0') {
374 // glXGetCurrentContext
381 if (name[15] == 's' && name[16] == 'p' && name[17] == 'l' && name[18] == 'a' && name[19] == 'y' && name[20] == '\0') {
382 // glXGetCurrentDisplay
387 if (name[15] == 'a' && name[16] == 'w' && name[17] == 'a' && name[18] == 'b' && name[19] == 'l' && name[20] == 'e' && name[21] == '\0') {
388 // glXGetCurrentDrawable
395 if (name[14] == 'e' && name[15] == 'a' && name[16] == 'd' && name[17] == 'D' && name[18] == 'r' && name[19] == 'a' && name[20] == 'w' && name[21] == 'a' && name[22] == 'b' && name[23] == 'l' && name[24] == 'e' && name[25] == '\0') {
396 // glXGetCurrentReadDrawable
397 retrace_glXGetCurrentReadDrawable(call);
432 if (name[15] == 't' && name[16] == 't' && name[17] == 'r' && name[18] == 'i' && name[19] == 'b' && name[20] == '\0') {
433 // glXGetFBConfigAttrib
434 retrace_glXGetFBConfigAttrib(call);
439 if (name[15] == '\0') {
441 retrace_glXGetFBConfigs(call);
485 retrace_glXGetProcAddress(call);
489 if (name[18] == 'R' && name[19] == 'B' && name[20] == '\0') {
490 // glXGetProcAddressARB
491 retrace_glXGetProcAddressARB(call);
518 if (name[7] == 'e' && name[8] == 'l' && name[9] == 'e' && name[10] == 'c' && name[11] == 't' && name[12] == 'e' && name[13] == 'd' && name[14] == 'E' && name[15] == 'v' && name[16] == 'e' && name[17] == 'n' && name[18] == 't' && name[19] == '\0') {
519 // glXGetSelectedEvent
520 retrace_glXGetSelectedEvent(call);
525 if (name[7] == 'i' && name[8] == 's' && name[9] == 'u' && name[10] == 'a' && name[11] == 'l' && name[12] == 'F' && name[13] == 'r' && name[14] == 'o' && name[15] == 'm' && name[16] == 'F' && name[17] == 'B' && name[18] == 'C' && name[19] == 'o' && name[20] == 'n' && name[21] == 'f' && name[22] == 'i' && name[23] == 'g' && name[24] == '\0') {
526 // glXGetVisualFromFBConfig
527 retrace_glXGetVisualFromFBConfig(call);
538 if (name[4] == 's' && name[5] == 'D' && name[6] == 'i' && name[7] == 'r' && name[8] == 'e' && name[9] == 'c' && name[10] == 't' && name[11] == '\0') {
540 retrace_glXIsDirect(call);
555 if (name[9] == 'n' && name[10] == 't' && name[11] == 'e' && name[12] == 'x' && name[13] == 't' && name[14] == 'C' && name[15] == 'u' && name[16] == 'r' && name[17] == 'r' && name[18] == 'e' && name[19] == 'n' && name[20] == 't' && name[21] == '\0') {
556 // glXMakeContextCurrent
557 retrace_glXMakeContextCurrent(call);
562 if (name[9] == 'r' && name[10] == 'r' && name[11] == 'e' && name[12] == 'n' && name[13] == 't' && name[14] == '\0') {
564 retrace_glXMakeCurrent(call);
589 if (name[9] == 'o' && name[10] == 'n' && name[11] == 't' && name[12] == 'e' && name[13] == 'x' && name[14] == 't' && name[15] == '\0') {
591 retrace_glXQueryContext(call);
596 if (name[9] == 'r' && name[10] == 'a' && name[11] == 'w' && name[12] == 'a' && name[13] == 'b' && name[14] == 'l' && name[15] == 'e' && name[16] == '\0') {
598 retrace_glXQueryDrawable(call);
622 retrace_glXQueryExtension(call);
626 if (name[18] == 'S' && name[19] == 't' && name[20] == 'r' && name[21] == 'i' && name[22] == 'n' && name[23] == 'g' && name[24] == '\0') {
627 // glXQueryExtensionsString
628 retrace_glXQueryExtensionsString(call);
651 if (name[9] == 'e' && name[10] == 'r' && name[11] == 'v' && name[12] == 'e' && name[13] == 'r' && name[14] == 'S' && name[15] == 't' && name[16] == 'r' && name[17] == 'i' && name[18] == 'n' && name[19] == 'g' && name[20] == '\0') {
652 // glXQueryServerString
653 retrace_glXQueryServerString(call);
658 if (name[9] == 'e' && name[10] == 'r' && name[11] == 's' && name[12] == 'i' && name[13] == 'o' && name[14] == 'n' && name[15] == '\0') {
660 retrace_glXQueryVersion(call);
677 if (name[5] == 'l' && name[6] == 'e' && name[7] == 'c' && name[8] == 't' && name[9] == 'E' && name[10] == 'v' && name[11] == 'e' && name[12] == 'n' && name[13] == 't' && name[14] == '\0') {
679 retrace_glXSelectEvent(call);
684 if (name[5] == 'a' && name[6] == 'p' && name[7] == 'B' && name[8] == 'u' && name[9] == 'f' && name[10] == 'f' && name[11] == 'e' && name[12] == 'r' && name[13] == 's' && name[14] == '\0') {
686 retrace_glXSwapBuffers(call);
693 if (name[4] == 's' && name[5] == 'e' && name[6] == 'X' && name[7] == 'F' && name[8] == 'o' && name[9] == 'n' && name[10] == 't' && name[11] == '\0') {
695 retrace_glXUseXFont(call);
708 if (name[8] == 'L' && name[9] == '\0') {
710 retrace_glXWaitGL(call);
715 if (name[8] == '\0') {
717 retrace_glXWaitX(call);
730 retrace::retrace_unknown(call);