]> git.cworth.org Git - apitrace/blob - glretrace_wgl.cpp
Handle pointer casts better.
[apitrace] / glretrace_wgl.cpp
1 /**************************************************************************
2  *
3  * Copyright 2011 Jose Fonseca
4  * All Rights Reserved.
5  *
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:
12  *
13  * The above copyright notice and this permission notice shall be included in
14  * all copies or substantial portions of the Software.
15  *
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
22  * THE SOFTWARE.
23  *
24  **************************************************************************/
25
26
27 #include "glproc.hpp"
28 #include "retrace.hpp"
29 #include "glretrace.hpp"
30
31
32 using namespace glretrace;
33
34
35 typedef std::map<unsigned long long, glws::Drawable *> DrawableMap;
36 typedef std::map<unsigned long long, glws::Context *> ContextMap;
37 static DrawableMap drawable_map;
38 static DrawableMap pbuffer_map;
39 static ContextMap context_map;
40
41
42 static glws::Drawable *
43 getDrawable(unsigned long long hdc) {
44     if (hdc == 0) {
45         return NULL;
46     }
47
48     DrawableMap::const_iterator it;
49     it = drawable_map.find(hdc);
50     if (it == drawable_map.end()) {
51         return (drawable_map[hdc] = ws->createDrawable(visual));
52     }
53
54     return it->second;
55 }
56
57 static void retrace_wglCreateContext(Trace::Call &call) {
58     unsigned long long orig_context = call.ret->toUIntPtr();
59     glws::Context *context = ws->createContext(glretrace::visual);
60     context_map[orig_context] = context;
61 }
62
63 static void retrace_wglDeleteContext(Trace::Call &call) {
64 }
65
66 static void retrace_wglMakeCurrent(Trace::Call &call) {
67     if (drawable && context) {
68         glFlush();
69         if (!double_buffer) {
70             frame_complete(call.no);
71         }
72     }
73     
74     glws::Drawable *new_drawable = getDrawable(call.arg(0).toUIntPtr());
75     glws::Context *new_context = context_map[call.arg(1).toUIntPtr()];
76
77     bool result = ws->makeCurrent(new_drawable, new_context);
78
79     if (new_drawable && new_context && result) {
80         drawable = new_drawable;
81         context = new_context;
82     } else {
83         drawable = NULL;
84         context = NULL;
85     }
86 }
87
88 static void retrace_wglCopyContext(Trace::Call &call) {
89 }
90
91 static void retrace_wglChoosePixelFormat(Trace::Call &call) {
92 }
93
94 static void retrace_wglDescribePixelFormat(Trace::Call &call) {
95 }
96
97 static void retrace_wglSetPixelFormat(Trace::Call &call) {
98 }
99
100 static void retrace_wglSwapBuffers(Trace::Call &call) {
101     frame_complete(call.no);
102     if (double_buffer) {
103         drawable->swapBuffers();
104     } else {
105         glFlush();
106     }
107 }
108
109 static void retrace_wglShareLists(Trace::Call &call) {
110 }
111
112 static void retrace_wglCreateLayerContext(Trace::Call &call) {
113 }
114
115 static void retrace_wglDescribeLayerPlane(Trace::Call &call) {
116 }
117
118 static void retrace_wglSetLayerPaletteEntries(Trace::Call &call) {
119 }
120
121 static void retrace_wglRealizeLayerPalette(Trace::Call &call) {
122 }
123
124 static void retrace_wglSwapLayerBuffers(Trace::Call &call) {
125 }
126
127 static void retrace_wglUseFontBitmapsA(Trace::Call &call) {
128 }
129
130 static void retrace_wglUseFontBitmapsW(Trace::Call &call) {
131 }
132
133 static void retrace_wglSwapMultipleBuffers(Trace::Call &call) {
134 }
135
136 static void retrace_wglUseFontOutlinesA(Trace::Call &call) {
137 }
138
139 static void retrace_wglUseFontOutlinesW(Trace::Call &call) {
140 }
141
142 static void retrace_wglCreateBufferRegionARB(Trace::Call &call) {
143 }
144
145 static void retrace_wglDeleteBufferRegionARB(Trace::Call &call) {
146 }
147
148 static void retrace_wglSaveBufferRegionARB(Trace::Call &call) {
149 }
150
151 static void retrace_wglRestoreBufferRegionARB(Trace::Call &call) {
152 }
153
154 static void retrace_wglChoosePixelFormatARB(Trace::Call &call) {
155 }
156
157 static void retrace_wglMakeContextCurrentARB(Trace::Call &call) {
158 }
159
160 static void retrace_wglCreatePbufferARB(Trace::Call &call) {
161     unsigned iWidth = call.arg(2);
162     unsigned iHeight = call.arg(3);
163
164     unsigned long long orig_pbuffer = call.ret->toUIntPtr();
165     glws::Drawable *drawable = ws->createDrawable(glretrace::visual);
166
167     drawable->resize(iWidth, iHeight);
168
169     pbuffer_map[orig_pbuffer] = drawable;
170 }
171
172 static void retrace_wglGetPbufferDCARB(Trace::Call &call) {
173     glws::Drawable *pbuffer = pbuffer_map[call.arg(0).toUIntPtr()];
174
175     unsigned long long orig_hdc = call.ret->toUIntPtr();
176
177     drawable_map[orig_hdc] = pbuffer;
178 }
179
180 static void retrace_wglReleasePbufferDCARB(Trace::Call &call) {
181 }
182
183 static void retrace_wglDestroyPbufferARB(Trace::Call &call) {
184 }
185
186 static void retrace_wglQueryPbufferARB(Trace::Call &call) {
187 }
188
189 static void retrace_wglBindTexImageARB(Trace::Call &call) {
190 }
191
192 static void retrace_wglReleaseTexImageARB(Trace::Call &call) {
193 }
194
195 static void retrace_wglSetPbufferAttribARB(Trace::Call &call) {
196 }
197
198 static void retrace_wglCreateContextAttribsARB(Trace::Call &call) {
199 }
200
201 static void retrace_wglMakeContextCurrentEXT(Trace::Call &call) {
202 }
203
204 static void retrace_wglChoosePixelFormatEXT(Trace::Call &call) {
205 }
206
207 static void retrace_wglSwapIntervalEXT(Trace::Call &call) {
208 }
209
210 static void retrace_wglAllocateMemoryNV(Trace::Call &call) {
211 }
212
213 static void retrace_wglFreeMemoryNV(Trace::Call &call) {
214 }
215
216 static void retrace_glAddSwapHintRectWIN(Trace::Call &call) {
217 }
218
219 static void retrace_wglGetProcAddress(Trace::Call &call) {
220 }
221
222 void glretrace::retrace_call_wgl(Trace::Call &call) {
223     const char *name = call.name().c_str();
224
225     switch (name[0]) {
226     case 'g':
227         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') {
228             // glAddSwapHintRectWIN
229             retrace_glAddSwapHintRectWIN(call);
230             return;
231         }
232         break;
233     case 'w':
234         switch (name[1]) {
235         case 'g':
236             switch (name[2]) {
237             case 'l':
238                 switch (name[3]) {
239                 case 'A':
240                     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') {
241                         // wglAllocateMemoryNV
242                         retrace_wglAllocateMemoryNV(call);
243                         return;
244                     }
245                     break;
246                 case 'B':
247                     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') {
248                         // wglBindTexImageARB
249                         retrace_wglBindTexImageARB(call);
250                         return;
251                     }
252                     break;
253                 case 'C':
254                     switch (name[4]) {
255                     case 'h':
256                         switch (name[5]) {
257                         case 'o':
258                             switch (name[6]) {
259                             case 'o':
260                                 switch (name[7]) {
261                                 case 's':
262                                     switch (name[8]) {
263                                     case 'e':
264                                         switch (name[9]) {
265                                         case 'P':
266                                             switch (name[10]) {
267                                             case 'i':
268                                                 switch (name[11]) {
269                                                 case 'x':
270                                                     switch (name[12]) {
271                                                     case 'e':
272                                                         switch (name[13]) {
273                                                         case 'l':
274                                                             switch (name[14]) {
275                                                             case 'F':
276                                                                 switch (name[15]) {
277                                                                 case 'o':
278                                                                     switch (name[16]) {
279                                                                     case 'r':
280                                                                         switch (name[17]) {
281                                                                         case 'm':
282                                                                             switch (name[18]) {
283                                                                             case 'a':
284                                                                                 switch (name[19]) {
285                                                                                 case 't':
286                                                                                     switch (name[20]) {
287                                                                                     case '\0':
288                                                                                         // wglChoosePixelFormat
289                                                                                         retrace_wglChoosePixelFormat(call);
290                                                                                         return;
291                                                                                         break;
292                                                                                     case 'A':
293                                                                                         if (name[21] == 'R' && name[22] == 'B' && name[23] == '\0') {
294                                                                                             // wglChoosePixelFormatARB
295                                                                                             retrace_wglChoosePixelFormatARB(call);
296                                                                                             return;
297                                                                                         }
298                                                                                         break;
299                                                                                     case 'E':
300                                                                                         if (name[21] == 'X' && name[22] == 'T' && name[23] == '\0') {
301                                                                                             // wglChoosePixelFormatEXT
302                                                                                             retrace_wglChoosePixelFormatEXT(call);
303                                                                                             return;
304                                                                                         }
305                                                                                         break;
306                                                                                     }
307                                                                                     break;
308                                                                                 }
309                                                                                 break;
310                                                                             }
311                                                                             break;
312                                                                         }
313                                                                         break;
314                                                                     }
315                                                                     break;
316                                                                 }
317                                                                 break;
318                                                             }
319                                                             break;
320                                                         }
321                                                         break;
322                                                     }
323                                                     break;
324                                                 }
325                                                 break;
326                                             }
327                                             break;
328                                         }
329                                         break;
330                                     }
331                                     break;
332                                 }
333                                 break;
334                             }
335                             break;
336                         }
337                         break;
338                     case 'o':
339                         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') {
340                             // wglCopyContext
341                             retrace_wglCopyContext(call);
342                             return;
343                         }
344                         break;
345                     case 'r':
346                         switch (name[5]) {
347                         case 'e':
348                             switch (name[6]) {
349                             case 'a':
350                                 switch (name[7]) {
351                                 case 't':
352                                     switch (name[8]) {
353                                     case 'e':
354                                         switch (name[9]) {
355                                         case 'B':
356                                             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') {
357                                                 // wglCreateBufferRegionARB
358                                                 retrace_wglCreateBufferRegionARB(call);
359                                                 return;
360                                             }
361                                             break;
362                                         case 'C':
363                                             switch (name[10]) {
364                                             case 'o':
365                                                 switch (name[11]) {
366                                                 case 'n':
367                                                     switch (name[12]) {
368                                                     case 't':
369                                                         switch (name[13]) {
370                                                         case 'e':
371                                                             switch (name[14]) {
372                                                             case 'x':
373                                                                 switch (name[15]) {
374                                                                 case 't':
375                                                                     switch (name[16]) {
376                                                                     case '\0':
377                                                                         // wglCreateContext
378                                                                         retrace_wglCreateContext(call);
379                                                                         return;
380                                                                         break;
381                                                                     case 'A':
382                                                                         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') {
383                                                                             // wglCreateContextAttribsARB
384                                                                             retrace_wglCreateContextAttribsARB(call);
385                                                                             return;
386                                                                         }
387                                                                         break;
388                                                                     }
389                                                                     break;
390                                                                 }
391                                                                 break;
392                                                             }
393                                                             break;
394                                                         }
395                                                         break;
396                                                     }
397                                                     break;
398                                                 }
399                                                 break;
400                                             }
401                                             break;
402                                         case 'L':
403                                             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') {
404                                                 // wglCreateLayerContext
405                                                 retrace_wglCreateLayerContext(call);
406                                                 return;
407                                             }
408                                             break;
409                                         case 'P':
410                                             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') {
411                                                 // wglCreatePbufferARB
412                                                 retrace_wglCreatePbufferARB(call);
413                                                 return;
414                                             }
415                                             break;
416                                         }
417                                         break;
418                                     }
419                                     break;
420                                 }
421                                 break;
422                             }
423                             break;
424                         }
425                         break;
426                     }
427                     break;
428                 case 'D':
429                     switch (name[4]) {
430                     case 'e':
431                         switch (name[5]) {
432                         case 'l':
433                             switch (name[6]) {
434                             case 'e':
435                                 switch (name[7]) {
436                                 case 't':
437                                     switch (name[8]) {
438                                     case 'e':
439                                         switch (name[9]) {
440                                         case 'B':
441                                             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') {
442                                                 // wglDeleteBufferRegionARB
443                                                 retrace_wglDeleteBufferRegionARB(call);
444                                                 return;
445                                             }
446                                             break;
447                                         case 'C':
448                                             if (name[10] == 'o' && name[11] == 'n' && name[12] == 't' && name[13] == 'e' && name[14] == 'x' && name[15] == 't' && name[16] == '\0') {
449                                                 // wglDeleteContext
450                                                 retrace_wglDeleteContext(call);
451                                                 return;
452                                             }
453                                             break;
454                                         }
455                                         break;
456                                     }
457                                     break;
458                                 }
459                                 break;
460                             }
461                             break;
462                         case 's':
463                             switch (name[6]) {
464                             case 'c':
465                                 switch (name[7]) {
466                                 case 'r':
467                                     switch (name[8]) {
468                                     case 'i':
469                                         switch (name[9]) {
470                                         case 'b':
471                                             switch (name[10]) {
472                                             case 'e':
473                                                 switch (name[11]) {
474                                                 case 'L':
475                                                     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') {
476                                                         // wglDescribeLayerPlane
477                                                         retrace_wglDescribeLayerPlane(call);
478                                                         return;
479                                                     }
480                                                     break;
481                                                 case 'P':
482                                                     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') {
483                                                         // wglDescribePixelFormat
484                                                         retrace_wglDescribePixelFormat(call);
485                                                         return;
486                                                     }
487                                                     break;
488                                                 }
489                                                 break;
490                                             }
491                                             break;
492                                         }
493                                         break;
494                                     }
495                                     break;
496                                 }
497                                 break;
498                             case 't':
499                                 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') {
500                                     // wglDestroyPbufferARB
501                                     retrace_wglDestroyPbufferARB(call);
502                                     return;
503                                 }
504                                 break;
505                             }
506                             break;
507                         }
508                         break;
509                     }
510                     break;
511                 case 'F':
512                     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') {
513                         // wglFreeMemoryNV
514                         retrace_wglFreeMemoryNV(call);
515                         return;
516                     }
517                     break;
518                 case 'G':
519                     switch (name[4]) {
520                     case 'e':
521                         switch (name[5]) {
522                         case 't':
523                             switch (name[6]) {
524                             case 'C':
525                                 switch (name[7]) {
526                                 case 'u':
527                                     switch (name[8]) {
528                                     case 'r':
529                                         switch (name[9]) {
530                                         case 'r':
531                                             switch (name[10]) {
532                                             case 'e':
533                                                 switch (name[11]) {
534                                                 case 'n':
535                                                     switch (name[12]) {
536                                                     case 't':
537                                                         switch (name[13]) {
538                                                         case 'C':
539                                                             if (name[14] == 'o' && name[15] == 'n' && name[16] == 't' && name[17] == 'e' && name[18] == 'x' && name[19] == 't' && name[20] == '\0') {
540                                                                 // wglGetCurrentContext
541                                                                 return;
542                                                             }
543                                                             break;
544                                                         case 'D':
545                                                             if (name[14] == 'C' && name[15] == '\0') {
546                                                                 // wglGetCurrentDC
547                                                                 return;
548                                                             }
549                                                             break;
550                                                         case 'R':
551                                                             switch (name[14]) {
552                                                             case 'e':
553                                                                 switch (name[15]) {
554                                                                 case 'a':
555                                                                     switch (name[16]) {
556                                                                     case 'd':
557                                                                         switch (name[17]) {
558                                                                         case 'D':
559                                                                             switch (name[18]) {
560                                                                             case 'C':
561                                                                                 switch (name[19]) {
562                                                                                 case 'A':
563                                                                                     if (name[20] == 'R' && name[21] == 'B' && name[22] == '\0') {
564                                                                                         // wglGetCurrentReadDCARB
565                                                                                         return;
566                                                                                     }
567                                                                                     break;
568                                                                                 case 'E':
569                                                                                     if (name[20] == 'X' && name[21] == 'T' && name[22] == '\0') {
570                                                                                         // wglGetCurrentReadDCEXT
571                                                                                         return;
572                                                                                     }
573                                                                                     break;
574                                                                                 }
575                                                                                 break;
576                                                                             }
577                                                                             break;
578                                                                         }
579                                                                         break;
580                                                                     }
581                                                                     break;
582                                                                 }
583                                                                 break;
584                                                             }
585                                                             break;
586                                                         }
587                                                         break;
588                                                     }
589                                                     break;
590                                                 }
591                                                 break;
592                                             }
593                                             break;
594                                         }
595                                         break;
596                                     }
597                                     break;
598                                 }
599                                 break;
600                             case 'D':
601                                 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') {
602                                     // wglGetDefaultProcAddress
603                                     return;
604                                 }
605                                 break;
606                             case 'E':
607                                 switch (name[7]) {
608                                 case 'x':
609                                     switch (name[8]) {
610                                     case 't':
611                                         switch (name[9]) {
612                                         case 'e':
613                                             switch (name[10]) {
614                                             case 'n':
615                                                 switch (name[11]) {
616                                                 case 's':
617                                                     switch (name[12]) {
618                                                     case 'i':
619                                                         switch (name[13]) {
620                                                         case 'o':
621                                                             switch (name[14]) {
622                                                             case 'n':
623                                                                 switch (name[15]) {
624                                                                 case 's':
625                                                                     switch (name[16]) {
626                                                                     case 'S':
627                                                                         switch (name[17]) {
628                                                                         case 't':
629                                                                             switch (name[18]) {
630                                                                             case 'r':
631                                                                                 switch (name[19]) {
632                                                                                 case 'i':
633                                                                                     switch (name[20]) {
634                                                                                     case 'n':
635                                                                                         switch (name[21]) {
636                                                                                         case 'g':
637                                                                                             switch (name[22]) {
638                                                                                             case 'A':
639                                                                                                 if (name[23] == 'R' && name[24] == 'B' && name[25] == '\0') {
640                                                                                                     // wglGetExtensionsStringARB
641                                                                                                     return;
642                                                                                                 }
643                                                                                                 break;
644                                                                                             case 'E':
645                                                                                                 if (name[23] == 'X' && name[24] == 'T' && name[25] == '\0') {
646                                                                                                     // wglGetExtensionsStringEXT
647                                                                                                     return;
648                                                                                                 }
649                                                                                                 break;
650                                                                                             }
651                                                                                             break;
652                                                                                         }
653                                                                                         break;
654                                                                                     }
655                                                                                     break;
656                                                                                 }
657                                                                                 break;
658                                                                             }
659                                                                             break;
660                                                                         }
661                                                                         break;
662                                                                     }
663                                                                     break;
664                                                                 }
665                                                                 break;
666                                                             }
667                                                             break;
668                                                         }
669                                                         break;
670                                                     }
671                                                     break;
672                                                 }
673                                                 break;
674                                             }
675                                             break;
676                                         }
677                                         break;
678                                     }
679                                     break;
680                                 }
681                                 break;
682                             case 'L':
683                                 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') {
684                                     // wglGetLayerPaletteEntries
685                                     return;
686                                 }
687                                 break;
688                             case 'P':
689                                 switch (name[7]) {
690                                 case 'b':
691                                     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') {
692                                         // wglGetPbufferDCARB
693                                         retrace_wglGetPbufferDCARB(call);
694                                         return;
695                                     }
696                                     break;
697                                 case 'i':
698                                     switch (name[8]) {
699                                     case 'x':
700                                         switch (name[9]) {
701                                         case 'e':
702                                             switch (name[10]) {
703                                             case 'l':
704                                                 switch (name[11]) {
705                                                 case 'F':
706                                                     switch (name[12]) {
707                                                     case 'o':
708                                                         switch (name[13]) {
709                                                         case 'r':
710                                                             switch (name[14]) {
711                                                             case 'm':
712                                                                 switch (name[15]) {
713                                                                 case 'a':
714                                                                     switch (name[16]) {
715                                                                     case 't':
716                                                                         switch (name[17]) {
717                                                                         case '\0':
718                                                                             // wglGetPixelFormat
719                                                                             return;
720                                                                             break;
721                                                                         case 'A':
722                                                                             switch (name[18]) {
723                                                                             case 't':
724                                                                                 switch (name[19]) {
725                                                                                 case 't':
726                                                                                     switch (name[20]) {
727                                                                                     case 'r':
728                                                                                         switch (name[21]) {
729                                                                                         case 'i':
730                                                                                             switch (name[22]) {
731                                                                                             case 'b':
732                                                                                                 switch (name[23]) {
733                                                                                                 case 'f':
734                                                                                                     switch (name[24]) {
735                                                                                                     case 'v':
736                                                                                                         switch (name[25]) {
737                                                                                                         case 'A':
738                                                                                                             if (name[26] == 'R' && name[27] == 'B' && name[28] == '\0') {
739                                                                                                                 // wglGetPixelFormatAttribfvARB
740                                                                                                                 return;
741                                                                                                             }
742                                                                                                             break;
743                                                                                                         case 'E':
744                                                                                                             if (name[26] == 'X' && name[27] == 'T' && name[28] == '\0') {
745                                                                                                                 // wglGetPixelFormatAttribfvEXT
746                                                                                                                 return;
747                                                                                                             }
748                                                                                                             break;
749                                                                                                         }
750                                                                                                         break;
751                                                                                                     }
752                                                                                                     break;
753                                                                                                 case 'i':
754                                                                                                     switch (name[24]) {
755                                                                                                     case 'v':
756                                                                                                         switch (name[25]) {
757                                                                                                         case 'A':
758                                                                                                             if (name[26] == 'R' && name[27] == 'B' && name[28] == '\0') {
759                                                                                                                 // wglGetPixelFormatAttribivARB
760                                                                                                                 return;
761                                                                                                             }
762                                                                                                             break;
763                                                                                                         case 'E':
764                                                                                                             if (name[26] == 'X' && name[27] == 'T' && name[28] == '\0') {
765                                                                                                                 // wglGetPixelFormatAttribivEXT
766                                                                                                                 return;
767                                                                                                             }
768                                                                                                             break;
769                                                                                                         }
770                                                                                                         break;
771                                                                                                     }
772                                                                                                     break;
773                                                                                                 }
774                                                                                                 break;
775                                                                                             }
776                                                                                             break;
777                                                                                         }
778                                                                                         break;
779                                                                                     }
780                                                                                     break;
781                                                                                 }
782                                                                                 break;
783                                                                             }
784                                                                             break;
785                                                                         }
786                                                                         break;
787                                                                     }
788                                                                     break;
789                                                                 }
790                                                                 break;
791                                                             }
792                                                             break;
793                                                         }
794                                                         break;
795                                                     }
796                                                     break;
797                                                 }
798                                                 break;
799                                             }
800                                             break;
801                                         }
802                                         break;
803                                     }
804                                     break;
805                                 case 'r':
806                                     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') {
807                                         // wglGetProcAddress
808                                         retrace_wglGetProcAddress(call);
809                                         return;
810                                     }
811                                     break;
812                                 }
813                                 break;
814                             case 'S':
815                                 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') {
816                                     // wglGetSwapIntervalEXT
817                                     return;
818                                 }
819                                 break;
820                             }
821                             break;
822                         }
823                         break;
824                     }
825                     break;
826                 case 'M':
827                     switch (name[4]) {
828                     case 'a':
829                         switch (name[5]) {
830                         case 'k':
831                             switch (name[6]) {
832                             case 'e':
833                                 switch (name[7]) {
834                                 case 'C':
835                                     switch (name[8]) {
836                                     case 'o':
837                                         switch (name[9]) {
838                                         case 'n':
839                                             switch (name[10]) {
840                                             case 't':
841                                                 switch (name[11]) {
842                                                 case 'e':
843                                                     switch (name[12]) {
844                                                     case 'x':
845                                                         switch (name[13]) {
846                                                         case 't':
847                                                             switch (name[14]) {
848                                                             case 'C':
849                                                                 switch (name[15]) {
850                                                                 case 'u':
851                                                                     switch (name[16]) {
852                                                                     case 'r':
853                                                                         switch (name[17]) {
854                                                                         case 'r':
855                                                                             switch (name[18]) {
856                                                                             case 'e':
857                                                                                 switch (name[19]) {
858                                                                                 case 'n':
859                                                                                     switch (name[20]) {
860                                                                                     case 't':
861                                                                                         switch (name[21]) {
862                                                                                         case 'A':
863                                                                                             if (name[22] == 'R' && name[23] == 'B' && name[24] == '\0') {
864                                                                                                 // wglMakeContextCurrentARB
865                                                                                                 retrace_wglMakeContextCurrentARB(call);
866                                                                                                 return;
867                                                                                             }
868                                                                                             break;
869                                                                                         case 'E':
870                                                                                             if (name[22] == 'X' && name[23] == 'T' && name[24] == '\0') {
871                                                                                                 // wglMakeContextCurrentEXT
872                                                                                                 retrace_wglMakeContextCurrentEXT(call);
873                                                                                                 return;
874                                                                                             }
875                                                                                             break;
876                                                                                         }
877                                                                                         break;
878                                                                                     }
879                                                                                     break;
880                                                                                 }
881                                                                                 break;
882                                                                             }
883                                                                             break;
884                                                                         }
885                                                                         break;
886                                                                     }
887                                                                     break;
888                                                                 }
889                                                                 break;
890                                                             }
891                                                             break;
892                                                         }
893                                                         break;
894                                                     }
895                                                     break;
896                                                 }
897                                                 break;
898                                             }
899                                             break;
900                                         }
901                                         break;
902                                     case 'u':
903                                         if (name[9] == 'r' && name[10] == 'r' && name[11] == 'e' && name[12] == 'n' && name[13] == 't' && name[14] == '\0') {
904                                             // wglMakeCurrent
905                                             retrace_wglMakeCurrent(call);
906                                             return;
907                                         }
908                                         break;
909                                     }
910                                     break;
911                                 }
912                                 break;
913                             }
914                             break;
915                         }
916                         break;
917                     }
918                     break;
919                 case 'Q':
920                     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') {
921                         // wglQueryPbufferARB
922                         retrace_wglQueryPbufferARB(call);
923                         return;
924                     }
925                     break;
926                 case 'R':
927                     switch (name[4]) {
928                     case 'e':
929                         switch (name[5]) {
930                         case 'a':
931                             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') {
932                                 // wglRealizeLayerPalette
933                                 retrace_wglRealizeLayerPalette(call);
934                                 return;
935                             }
936                             break;
937                         case 'l':
938                             switch (name[6]) {
939                             case 'e':
940                                 switch (name[7]) {
941                                 case 'a':
942                                     switch (name[8]) {
943                                     case 's':
944                                         switch (name[9]) {
945                                         case 'e':
946                                             switch (name[10]) {
947                                             case 'P':
948                                                 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') {
949                                                     // wglReleasePbufferDCARB
950                                                     retrace_wglReleasePbufferDCARB(call);
951                                                     return;
952                                                 }
953                                                 break;
954                                             case 'T':
955                                                 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') {
956                                                     // wglReleaseTexImageARB
957                                                     retrace_wglReleaseTexImageARB(call);
958                                                     return;
959                                                 }
960                                                 break;
961                                             }
962                                             break;
963                                         }
964                                         break;
965                                     }
966                                     break;
967                                 }
968                                 break;
969                             }
970                             break;
971                         case 's':
972                             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') {
973                                 // wglRestoreBufferRegionARB
974                                 retrace_wglRestoreBufferRegionARB(call);
975                                 return;
976                             }
977                             break;
978                         }
979                         break;
980                     }
981                     break;
982                 case 'S':
983                     switch (name[4]) {
984                     case 'a':
985                         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') {
986                             // wglSaveBufferRegionARB
987                             retrace_wglSaveBufferRegionARB(call);
988                             return;
989                         }
990                         break;
991                     case 'e':
992                         switch (name[5]) {
993                         case 't':
994                             switch (name[6]) {
995                             case 'L':
996                                 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') {
997                                     // wglSetLayerPaletteEntries
998                                     retrace_wglSetLayerPaletteEntries(call);
999                                     return;
1000                                 }
1001                                 break;
1002                             case 'P':
1003                                 switch (name[7]) {
1004                                 case 'b':
1005                                     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') {
1006                                         // wglSetPbufferAttribARB
1007                                         retrace_wglSetPbufferAttribARB(call);
1008                                         return;
1009                                     }
1010                                     break;
1011                                 case 'i':
1012                                     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') {
1013                                         // wglSetPixelFormat
1014                                         retrace_wglSetPixelFormat(call);
1015                                         return;
1016                                     }
1017                                     break;
1018                                 }
1019                                 break;
1020                             }
1021                             break;
1022                         }
1023                         break;
1024                     case 'h':
1025                         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') {
1026                             // wglShareLists
1027                             retrace_wglShareLists(call);
1028                             return;
1029                         }
1030                         break;
1031                     case 'w':
1032                         switch (name[5]) {
1033                         case 'a':
1034                             switch (name[6]) {
1035                             case 'p':
1036                                 switch (name[7]) {
1037                                 case 'B':
1038                                     if (name[8] == 'u' && name[9] == 'f' && name[10] == 'f' && name[11] == 'e' && name[12] == 'r' && name[13] == 's' && name[14] == '\0') {
1039                                         // wglSwapBuffers
1040                                         retrace_wglSwapBuffers(call);
1041                                         return;
1042                                     }
1043                                     break;
1044                                 case 'I':
1045                                     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') {
1046                                         // wglSwapIntervalEXT
1047                                         retrace_wglSwapIntervalEXT(call);
1048                                         return;
1049                                     }
1050                                     break;
1051                                 case 'L':
1052                                     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') {
1053                                         // wglSwapLayerBuffers
1054                                         retrace_wglSwapLayerBuffers(call);
1055                                         return;
1056                                     }
1057                                     break;
1058                                 case 'M':
1059                                     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') {
1060                                         // wglSwapMultipleBuffers
1061                                         retrace_wglSwapMultipleBuffers(call);
1062                                         return;
1063                                     }
1064                                     break;
1065                                 }
1066                                 break;
1067                             }
1068                             break;
1069                         }
1070                         break;
1071                     }
1072                     break;
1073                 case 'U':
1074                     switch (name[4]) {
1075                     case 's':
1076                         switch (name[5]) {
1077                         case 'e':
1078                             switch (name[6]) {
1079                             case 'F':
1080                                 switch (name[7]) {
1081                                 case 'o':
1082                                     switch (name[8]) {
1083                                     case 'n':
1084                                         switch (name[9]) {
1085                                         case 't':
1086                                             switch (name[10]) {
1087                                             case 'B':
1088                                                 switch (name[11]) {
1089                                                 case 'i':
1090                                                     switch (name[12]) {
1091                                                     case 't':
1092                                                         switch (name[13]) {
1093                                                         case 'm':
1094                                                             switch (name[14]) {
1095                                                             case 'a':
1096                                                                 switch (name[15]) {
1097                                                                 case 'p':
1098                                                                     switch (name[16]) {
1099                                                                     case 's':
1100                                                                         switch (name[17]) {
1101                                                                         case 'A':
1102                                                                             if (name[18] == '\0') {
1103                                                                                 // wglUseFontBitmapsA
1104                                                                                 retrace_wglUseFontBitmapsA(call);
1105                                                                                 return;
1106                                                                             }
1107                                                                             break;
1108                                                                         case 'W':
1109                                                                             if (name[18] == '\0') {
1110                                                                                 // wglUseFontBitmapsW
1111                                                                                 retrace_wglUseFontBitmapsW(call);
1112                                                                                 return;
1113                                                                             }
1114                                                                             break;
1115                                                                         }
1116                                                                         break;
1117                                                                     }
1118                                                                     break;
1119                                                                 }
1120                                                                 break;
1121                                                             }
1122                                                             break;
1123                                                         }
1124                                                         break;
1125                                                     }
1126                                                     break;
1127                                                 }
1128                                                 break;
1129                                             case 'O':
1130                                                 switch (name[11]) {
1131                                                 case 'u':
1132                                                     switch (name[12]) {
1133                                                     case 't':
1134                                                         switch (name[13]) {
1135                                                         case 'l':
1136                                                             switch (name[14]) {
1137                                                             case 'i':
1138                                                                 switch (name[15]) {
1139                                                                 case 'n':
1140                                                                     switch (name[16]) {
1141                                                                     case 'e':
1142                                                                         switch (name[17]) {
1143                                                                         case 's':
1144                                                                             switch (name[18]) {
1145                                                                             case 'A':
1146                                                                                 if (name[19] == '\0') {
1147                                                                                     // wglUseFontOutlinesA
1148                                                                                     retrace_wglUseFontOutlinesA(call);
1149                                                                                     return;
1150                                                                                 }
1151                                                                                 break;
1152                                                                             case 'W':
1153                                                                                 if (name[19] == '\0') {
1154                                                                                     // wglUseFontOutlinesW
1155                                                                                     retrace_wglUseFontOutlinesW(call);
1156                                                                                     return;
1157                                                                                 }
1158                                                                                 break;
1159                                                                             }
1160                                                                             break;
1161                                                                         }
1162                                                                         break;
1163                                                                     }
1164                                                                     break;
1165                                                                 }
1166                                                                 break;
1167                                                             }
1168                                                             break;
1169                                                         }
1170                                                         break;
1171                                                     }
1172                                                     break;
1173                                                 }
1174                                                 break;
1175                                             }
1176                                             break;
1177                                         }
1178                                         break;
1179                                     }
1180                                     break;
1181                                 }
1182                                 break;
1183                             }
1184                             break;
1185                         }
1186                         break;
1187                     }
1188                     break;
1189                 }
1190                 break;
1191             }
1192             break;
1193         }
1194         break;
1195     }
1196     retrace::retrace_unknown(call);
1197 }
1198