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_wglCreateContext(Trace::Call &call) {
38 static void retrace_wglDeleteContext(Trace::Call &call) {
41 static void retrace_wglMakeCurrent(Trace::Call &call) {
44 frame_complete(call.no);
48 static void retrace_wglCopyContext(Trace::Call &call) {
51 static void retrace_wglChoosePixelFormat(Trace::Call &call) {
54 static void retrace_wglDescribePixelFormat(Trace::Call &call) {
57 static void retrace_wglSetPixelFormat(Trace::Call &call) {
60 static void retrace_wglSwapBuffers(Trace::Call &call) {
61 frame_complete(call.no);
63 drawable->swapBuffers();
69 static void retrace_wglShareLists(Trace::Call &call) {
72 static void retrace_wglCreateLayerContext(Trace::Call &call) {
75 static void retrace_wglDescribeLayerPlane(Trace::Call &call) {
78 static void retrace_wglSetLayerPaletteEntries(Trace::Call &call) {
81 static void retrace_wglRealizeLayerPalette(Trace::Call &call) {
84 static void retrace_wglSwapLayerBuffers(Trace::Call &call) {
87 static void retrace_wglUseFontBitmapsA(Trace::Call &call) {
90 static void retrace_wglUseFontBitmapsW(Trace::Call &call) {
93 static void retrace_wglSwapMultipleBuffers(Trace::Call &call) {
96 static void retrace_wglUseFontOutlinesA(Trace::Call &call) {
99 static void retrace_wglUseFontOutlinesW(Trace::Call &call) {
102 static void retrace_wglCreateBufferRegionARB(Trace::Call &call) {
105 static void retrace_wglDeleteBufferRegionARB(Trace::Call &call) {
108 static void retrace_wglSaveBufferRegionARB(Trace::Call &call) {
111 static void retrace_wglRestoreBufferRegionARB(Trace::Call &call) {
114 static void retrace_wglChoosePixelFormatARB(Trace::Call &call) {
117 static void retrace_wglMakeContextCurrentARB(Trace::Call &call) {
120 static void retrace_wglCreatePbufferARB(Trace::Call &call) {
123 static void retrace_wglReleasePbufferDCARB(Trace::Call &call) {
126 static void retrace_wglDestroyPbufferARB(Trace::Call &call) {
129 static void retrace_wglQueryPbufferARB(Trace::Call &call) {
132 static void retrace_wglBindTexImageARB(Trace::Call &call) {
135 static void retrace_wglReleaseTexImageARB(Trace::Call &call) {
138 static void retrace_wglSetPbufferAttribARB(Trace::Call &call) {
141 static void retrace_wglCreateContextAttribsARB(Trace::Call &call) {
144 static void retrace_wglMakeContextCurrentEXT(Trace::Call &call) {
147 static void retrace_wglChoosePixelFormatEXT(Trace::Call &call) {
150 static void retrace_wglSwapIntervalEXT(Trace::Call &call) {
153 static void retrace_wglAllocateMemoryNV(Trace::Call &call) {
156 static void retrace_wglFreeMemoryNV(Trace::Call &call) {
159 static void retrace_glAddSwapHintRectWIN(Trace::Call &call) {
162 static void retrace_wglGetProcAddress(Trace::Call &call) {
165 void glretrace::retrace_call_wgl(Trace::Call &call) {
166 const char *name = call.name().c_str();
170 if (name[1] == 'l' && name[2] == 'A' && name[3] == 'd' && name[4] == 'd' && name[5] == 'S' && name[6] == 'w' && name[7] == 'a' && name[8] == 'p' && name[9] == 'H' && name[10] == 'i' && name[11] == 'n' && name[12] == 't' && name[13] == 'R' && name[14] == 'e' && name[15] == 'c' && name[16] == 't' && name[17] == 'W' && name[18] == 'I' && name[19] == 'N' && name[20] == '\0') {
171 // glAddSwapHintRectWIN
172 retrace_glAddSwapHintRectWIN(call);
183 if (name[4] == 'l' && name[5] == 'l' && name[6] == 'o' && name[7] == 'c' && name[8] == 'a' && name[9] == 't' && name[10] == 'e' && name[11] == 'M' && name[12] == 'e' && name[13] == 'm' && name[14] == 'o' && name[15] == 'r' && name[16] == 'y' && name[17] == 'N' && name[18] == 'V' && name[19] == '\0') {
184 // wglAllocateMemoryNV
185 retrace_wglAllocateMemoryNV(call);
190 if (name[4] == 'i' && name[5] == 'n' && name[6] == 'd' && name[7] == 'T' && name[8] == 'e' && name[9] == 'x' && name[10] == 'I' && name[11] == 'm' && name[12] == 'a' && name[13] == 'g' && name[14] == 'e' && name[15] == 'A' && name[16] == 'R' && name[17] == 'B' && name[18] == '\0') {
191 // wglBindTexImageARB
192 retrace_wglBindTexImageARB(call);
231 // wglChoosePixelFormat
232 retrace_wglChoosePixelFormat(call);
236 if (name[21] == 'R' && name[22] == 'B' && name[23] == '\0') {
237 // wglChoosePixelFormatARB
238 retrace_wglChoosePixelFormatARB(call);
243 if (name[21] == 'X' && name[22] == 'T' && name[23] == '\0') {
244 // wglChoosePixelFormatEXT
245 retrace_wglChoosePixelFormatEXT(call);
282 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') {
284 retrace_wglCopyContext(call);
299 if (name[10] == 'u' && name[11] == 'f' && name[12] == 'f' && name[13] == 'e' && name[14] == 'r' && name[15] == 'R' && name[16] == 'e' && name[17] == 'g' && name[18] == 'i' && name[19] == 'o' && name[20] == 'n' && name[21] == 'A' && name[22] == 'R' && name[23] == 'B' && name[24] == '\0') {
300 // wglCreateBufferRegionARB
301 retrace_wglCreateBufferRegionARB(call);
321 retrace_wglCreateContext(call);
325 if (name[17] == 't' && name[18] == 't' && name[19] == 'r' && name[20] == 'i' && name[21] == 'b' && name[22] == 's' && name[23] == 'A' && name[24] == 'R' && name[25] == 'B' && name[26] == '\0') {
326 // wglCreateContextAttribsARB
327 retrace_wglCreateContextAttribsARB(call);
346 if (name[10] == 'a' && name[11] == 'y' && name[12] == 'e' && name[13] == 'r' && name[14] == 'C' && name[15] == 'o' && name[16] == 'n' && name[17] == 't' && name[18] == 'e' && name[19] == 'x' && name[20] == 't' && name[21] == '\0') {
347 // wglCreateLayerContext
348 retrace_wglCreateLayerContext(call);
353 if (name[10] == 'b' && name[11] == 'u' && name[12] == 'f' && name[13] == 'f' && name[14] == 'e' && name[15] == 'r' && name[16] == 'A' && name[17] == 'R' && name[18] == 'B' && name[19] == '\0') {
354 // wglCreatePbufferARB
355 retrace_wglCreatePbufferARB(call);
384 if (name[10] == 'u' && name[11] == 'f' && name[12] == 'f' && name[13] == 'e' && name[14] == 'r' && name[15] == 'R' && name[16] == 'e' && name[17] == 'g' && name[18] == 'i' && name[19] == 'o' && name[20] == 'n' && name[21] == 'A' && name[22] == 'R' && name[23] == 'B' && name[24] == '\0') {
385 // wglDeleteBufferRegionARB
386 retrace_wglDeleteBufferRegionARB(call);
391 if (name[10] == 'o' && name[11] == 'n' && name[12] == 't' && name[13] == 'e' && name[14] == 'x' && name[15] == 't' && name[16] == '\0') {
393 retrace_wglDeleteContext(call);
418 if (name[12] == 'a' && name[13] == 'y' && name[14] == 'e' && name[15] == 'r' && name[16] == 'P' && name[17] == 'l' && name[18] == 'a' && name[19] == 'n' && name[20] == 'e' && name[21] == '\0') {
419 // wglDescribeLayerPlane
420 retrace_wglDescribeLayerPlane(call);
425 if (name[12] == 'i' && name[13] == 'x' && name[14] == 'e' && name[15] == 'l' && name[16] == 'F' && name[17] == 'o' && name[18] == 'r' && name[19] == 'm' && name[20] == 'a' && name[21] == 't' && name[22] == '\0') {
426 // wglDescribePixelFormat
427 retrace_wglDescribePixelFormat(call);
442 if (name[7] == 'r' && name[8] == 'o' && name[9] == 'y' && name[10] == 'P' && name[11] == 'b' && name[12] == 'u' && name[13] == 'f' && name[14] == 'f' && name[15] == 'e' && name[16] == 'r' && name[17] == 'A' && name[18] == 'R' && name[19] == 'B' && name[20] == '\0') {
443 // wglDestroyPbufferARB
444 retrace_wglDestroyPbufferARB(call);
455 if (name[4] == 'r' && name[5] == 'e' && name[6] == 'e' && name[7] == 'M' && name[8] == 'e' && name[9] == 'm' && name[10] == 'o' && name[11] == 'r' && name[12] == 'y' && name[13] == 'N' && name[14] == 'V' && name[15] == '\0') {
457 retrace_wglFreeMemoryNV(call);
482 if (name[14] == 'o' && name[15] == 'n' && name[16] == 't' && name[17] == 'e' && name[18] == 'x' && name[19] == 't' && name[20] == '\0') {
483 // wglGetCurrentContext
488 if (name[14] == 'C' && name[15] == '\0') {
506 if (name[20] == 'R' && name[21] == 'B' && name[22] == '\0') {
507 // wglGetCurrentReadDCARB
512 if (name[20] == 'X' && name[21] == 'T' && name[22] == '\0') {
513 // wglGetCurrentReadDCEXT
544 if (name[7] == 'e' && name[8] == 'f' && name[9] == 'a' && name[10] == 'u' && name[11] == 'l' && name[12] == 't' && name[13] == 'P' && name[14] == 'r' && name[15] == 'o' && name[16] == 'c' && name[17] == 'A' && name[18] == 'd' && name[19] == 'd' && name[20] == 'r' && name[21] == 'e' && name[22] == 's' && name[23] == 's' && name[24] == '\0') {
545 // wglGetDefaultProcAddress
582 if (name[23] == 'R' && name[24] == 'B' && name[25] == '\0') {
583 // wglGetExtensionsStringARB
588 if (name[23] == 'X' && name[24] == 'T' && name[25] == '\0') {
589 // wglGetExtensionsStringEXT
626 if (name[7] == 'a' && name[8] == 'y' && name[9] == 'e' && name[10] == 'r' && name[11] == 'P' && name[12] == 'a' && name[13] == 'l' && name[14] == 'e' && name[15] == 't' && name[16] == 't' && name[17] == 'e' && name[18] == 'E' && name[19] == 'n' && name[20] == 't' && name[21] == 'r' && name[22] == 'i' && name[23] == 'e' && name[24] == 's' && name[25] == '\0') {
627 // wglGetLayerPaletteEntries
634 if (name[8] == 'u' && name[9] == 'f' && name[10] == 'f' && name[11] == 'e' && name[12] == 'r' && name[13] == 'D' && name[14] == 'C' && name[15] == 'A' && name[16] == 'R' && name[17] == 'B' && name[18] == '\0') {
635 // wglGetPbufferDCARB
680 if (name[26] == 'R' && name[27] == 'B' && name[28] == '\0') {
681 // wglGetPixelFormatAttribfvARB
686 if (name[26] == 'X' && name[27] == 'T' && name[28] == '\0') {
687 // wglGetPixelFormatAttribfvEXT
700 if (name[26] == 'R' && name[27] == 'B' && name[28] == '\0') {
701 // wglGetPixelFormatAttribivARB
706 if (name[26] == 'X' && name[27] == 'T' && name[28] == '\0') {
707 // wglGetPixelFormatAttribivEXT
748 if (name[8] == 'o' && name[9] == 'c' && name[10] == 'A' && name[11] == 'd' && name[12] == 'd' && name[13] == 'r' && name[14] == 'e' && name[15] == 's' && name[16] == 's' && name[17] == '\0') {
750 retrace_wglGetProcAddress(call);
757 if (name[7] == 'w' && name[8] == 'a' && name[9] == 'p' && name[10] == 'I' && name[11] == 'n' && name[12] == 't' && name[13] == 'e' && name[14] == 'r' && name[15] == 'v' && name[16] == 'a' && name[17] == 'l' && name[18] == 'E' && name[19] == 'X' && name[20] == 'T' && name[21] == '\0') {
758 // wglGetSwapIntervalEXT
805 if (name[22] == 'R' && name[23] == 'B' && name[24] == '\0') {
806 // wglMakeContextCurrentARB
807 retrace_wglMakeContextCurrentARB(call);
812 if (name[22] == 'X' && name[23] == 'T' && name[24] == '\0') {
813 // wglMakeContextCurrentEXT
814 retrace_wglMakeContextCurrentEXT(call);
845 if (name[9] == 'r' && name[10] == 'r' && name[11] == 'e' && name[12] == 'n' && name[13] == 't' && name[14] == '\0') {
847 retrace_wglMakeCurrent(call);
862 if (name[4] == 'u' && name[5] == 'e' && name[6] == 'r' && name[7] == 'y' && name[8] == 'P' && name[9] == 'b' && name[10] == 'u' && name[11] == 'f' && name[12] == 'f' && name[13] == 'e' && name[14] == 'r' && name[15] == 'A' && name[16] == 'R' && name[17] == 'B' && name[18] == '\0') {
863 // wglQueryPbufferARB
864 retrace_wglQueryPbufferARB(call);
873 if (name[6] == 'l' && name[7] == 'i' && name[8] == 'z' && name[9] == 'e' && name[10] == 'L' && name[11] == 'a' && name[12] == 'y' && name[13] == 'e' && name[14] == 'r' && name[15] == 'P' && name[16] == 'a' && name[17] == 'l' && name[18] == 'e' && name[19] == 't' && name[20] == 't' && name[21] == 'e' && name[22] == '\0') {
874 // wglRealizeLayerPalette
875 retrace_wglRealizeLayerPalette(call);
890 if (name[11] == 'b' && name[12] == 'u' && name[13] == 'f' && name[14] == 'f' && name[15] == 'e' && name[16] == 'r' && name[17] == 'D' && name[18] == 'C' && name[19] == 'A' && name[20] == 'R' && name[21] == 'B' && name[22] == '\0') {
891 // wglReleasePbufferDCARB
892 retrace_wglReleasePbufferDCARB(call);
897 if (name[11] == 'e' && name[12] == 'x' && name[13] == 'I' && name[14] == 'm' && name[15] == 'a' && name[16] == 'g' && name[17] == 'e' && name[18] == 'A' && name[19] == 'R' && name[20] == 'B' && name[21] == '\0') {
898 // wglReleaseTexImageARB
899 retrace_wglReleaseTexImageARB(call);
914 if (name[6] == 't' && name[7] == 'o' && name[8] == 'r' && name[9] == 'e' && name[10] == 'B' && name[11] == 'u' && name[12] == 'f' && name[13] == 'f' && name[14] == 'e' && name[15] == 'r' && name[16] == 'R' && name[17] == 'e' && name[18] == 'g' && name[19] == 'i' && name[20] == 'o' && name[21] == 'n' && name[22] == 'A' && name[23] == 'R' && name[24] == 'B' && name[25] == '\0') {
915 // wglRestoreBufferRegionARB
916 retrace_wglRestoreBufferRegionARB(call);
927 if (name[5] == 'v' && name[6] == 'e' && name[7] == 'B' && name[8] == 'u' && name[9] == 'f' && name[10] == 'f' && name[11] == 'e' && name[12] == 'r' && name[13] == 'R' && name[14] == 'e' && name[15] == 'g' && name[16] == 'i' && name[17] == 'o' && name[18] == 'n' && name[19] == 'A' && name[20] == 'R' && name[21] == 'B' && name[22] == '\0') {
928 // wglSaveBufferRegionARB
929 retrace_wglSaveBufferRegionARB(call);
938 if (name[7] == 'a' && name[8] == 'y' && name[9] == 'e' && name[10] == 'r' && name[11] == 'P' && name[12] == 'a' && name[13] == 'l' && name[14] == 'e' && name[15] == 't' && name[16] == 't' && name[17] == 'e' && name[18] == 'E' && name[19] == 'n' && name[20] == 't' && name[21] == 'r' && name[22] == 'i' && name[23] == 'e' && name[24] == 's' && name[25] == '\0') {
939 // wglSetLayerPaletteEntries
940 retrace_wglSetLayerPaletteEntries(call);
947 if (name[8] == 'u' && name[9] == 'f' && name[10] == 'f' && name[11] == 'e' && name[12] == 'r' && name[13] == 'A' && name[14] == 't' && name[15] == 't' && name[16] == 'r' && name[17] == 'i' && name[18] == 'b' && name[19] == 'A' && name[20] == 'R' && name[21] == 'B' && name[22] == '\0') {
948 // wglSetPbufferAttribARB
949 retrace_wglSetPbufferAttribARB(call);
954 if (name[8] == 'x' && name[9] == 'e' && name[10] == 'l' && name[11] == 'F' && name[12] == 'o' && name[13] == 'r' && name[14] == 'm' && name[15] == 'a' && name[16] == 't' && name[17] == '\0') {
956 retrace_wglSetPixelFormat(call);
967 if (name[5] == 'a' && name[6] == 'r' && name[7] == 'e' && name[8] == 'L' && name[9] == 'i' && name[10] == 's' && name[11] == 't' && name[12] == 's' && name[13] == '\0') {
969 retrace_wglShareLists(call);
980 if (name[8] == 'u' && name[9] == 'f' && name[10] == 'f' && name[11] == 'e' && name[12] == 'r' && name[13] == 's' && name[14] == '\0') {
982 retrace_wglSwapBuffers(call);
987 if (name[8] == 'n' && name[9] == 't' && name[10] == 'e' && name[11] == 'r' && name[12] == 'v' && name[13] == 'a' && name[14] == 'l' && name[15] == 'E' && name[16] == 'X' && name[17] == 'T' && name[18] == '\0') {
988 // wglSwapIntervalEXT
989 retrace_wglSwapIntervalEXT(call);
994 if (name[8] == 'a' && name[9] == 'y' && name[10] == 'e' && name[11] == 'r' && name[12] == 'B' && name[13] == 'u' && name[14] == 'f' && name[15] == 'f' && name[16] == 'e' && name[17] == 'r' && name[18] == 's' && name[19] == '\0') {
995 // wglSwapLayerBuffers
996 retrace_wglSwapLayerBuffers(call);
1001 if (name[8] == 'u' && name[9] == 'l' && name[10] == 't' && name[11] == 'i' && name[12] == 'p' && name[13] == 'l' && name[14] == 'e' && name[15] == 'B' && name[16] == 'u' && name[17] == 'f' && name[18] == 'f' && name[19] == 'e' && name[20] == 'r' && name[21] == 's' && name[22] == '\0') {
1002 // wglSwapMultipleBuffers
1003 retrace_wglSwapMultipleBuffers(call);
1044 if (name[18] == '\0') {
1045 // wglUseFontBitmapsA
1046 retrace_wglUseFontBitmapsA(call);
1051 if (name[18] == '\0') {
1052 // wglUseFontBitmapsW
1053 retrace_wglUseFontBitmapsW(call);
1088 if (name[19] == '\0') {
1089 // wglUseFontOutlinesA
1090 retrace_wglUseFontOutlinesA(call);
1095 if (name[19] == '\0') {
1096 // wglUseFontOutlinesW
1097 retrace_wglUseFontOutlinesW(call);
1138 retrace::retrace_unknown(call);