]> git.cworth.org Git - apitrace/blob - glretrace_wgl.cpp
Stop using implicit casts.
[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     retrace_wglCreateContext(call);
114 }
115
116 static void retrace_wglDescribeLayerPlane(Trace::Call &call) {
117 }
118
119 static void retrace_wglSetLayerPaletteEntries(Trace::Call &call) {
120 }
121
122 static void retrace_wglRealizeLayerPalette(Trace::Call &call) {
123 }
124
125 static void retrace_wglSwapLayerBuffers(Trace::Call &call) {
126     retrace_wglSwapBuffers(call);
127 }
128
129 static void retrace_wglUseFontBitmapsA(Trace::Call &call) {
130 }
131
132 static void retrace_wglUseFontBitmapsW(Trace::Call &call) {
133 }
134
135 static void retrace_wglSwapMultipleBuffers(Trace::Call &call) {
136 }
137
138 static void retrace_wglUseFontOutlinesA(Trace::Call &call) {
139 }
140
141 static void retrace_wglUseFontOutlinesW(Trace::Call &call) {
142 }
143
144 static void retrace_wglCreateBufferRegionARB(Trace::Call &call) {
145 }
146
147 static void retrace_wglDeleteBufferRegionARB(Trace::Call &call) {
148 }
149
150 static void retrace_wglSaveBufferRegionARB(Trace::Call &call) {
151 }
152
153 static void retrace_wglRestoreBufferRegionARB(Trace::Call &call) {
154 }
155
156 static void retrace_wglChoosePixelFormatARB(Trace::Call &call) {
157 }
158
159 static void retrace_wglMakeContextCurrentARB(Trace::Call &call) {
160 }
161
162 static void retrace_wglCreatePbufferARB(Trace::Call &call) {
163     unsigned iWidth = call.arg(2).toUInt();
164     unsigned iHeight = call.arg(3).toUInt();
165
166     unsigned long long orig_pbuffer = call.ret->toUIntPtr();
167     glws::Drawable *drawable = ws->createDrawable(glretrace::visual);
168
169     drawable->resize(iWidth, iHeight);
170
171     pbuffer_map[orig_pbuffer] = drawable;
172 }
173
174 static void retrace_wglGetPbufferDCARB(Trace::Call &call) {
175     glws::Drawable *pbuffer = pbuffer_map[call.arg(0).toUIntPtr()];
176
177     unsigned long long orig_hdc = call.ret->toUIntPtr();
178
179     drawable_map[orig_hdc] = pbuffer;
180 }
181
182 static void retrace_wglReleasePbufferDCARB(Trace::Call &call) {
183 }
184
185 static void retrace_wglDestroyPbufferARB(Trace::Call &call) {
186 }
187
188 static void retrace_wglQueryPbufferARB(Trace::Call &call) {
189 }
190
191 static void retrace_wglBindTexImageARB(Trace::Call &call) {
192 }
193
194 static void retrace_wglReleaseTexImageARB(Trace::Call &call) {
195 }
196
197 static void retrace_wglSetPbufferAttribARB(Trace::Call &call) {
198 }
199
200 static void retrace_wglCreateContextAttribsARB(Trace::Call &call) {
201 }
202
203 static void retrace_wglMakeContextCurrentEXT(Trace::Call &call) {
204 }
205
206 static void retrace_wglChoosePixelFormatEXT(Trace::Call &call) {
207 }
208
209 static void retrace_wglSwapIntervalEXT(Trace::Call &call) {
210 }
211
212 static void retrace_wglAllocateMemoryNV(Trace::Call &call) {
213 }
214
215 static void retrace_wglFreeMemoryNV(Trace::Call &call) {
216 }
217
218 static void retrace_glAddSwapHintRectWIN(Trace::Call &call) {
219 }
220
221 static void retrace_wglGetProcAddress(Trace::Call &call) {
222 }
223
224 void glretrace::retrace_call_wgl(Trace::Call &call) {
225     const char *name = call.name().c_str();
226
227     switch (name[0]) {
228     case 'g':
229         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') {
230             // glAddSwapHintRectWIN
231             retrace_glAddSwapHintRectWIN(call);
232             return;
233         }
234         break;
235     case 'w':
236         switch (name[1]) {
237         case 'g':
238             switch (name[2]) {
239             case 'l':
240                 switch (name[3]) {
241                 case 'A':
242                     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') {
243                         // wglAllocateMemoryNV
244                         retrace_wglAllocateMemoryNV(call);
245                         return;
246                     }
247                     break;
248                 case 'B':
249                     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') {
250                         // wglBindTexImageARB
251                         retrace_wglBindTexImageARB(call);
252                         return;
253                     }
254                     break;
255                 case 'C':
256                     switch (name[4]) {
257                     case 'h':
258                         switch (name[5]) {
259                         case 'o':
260                             switch (name[6]) {
261                             case 'o':
262                                 switch (name[7]) {
263                                 case 's':
264                                     switch (name[8]) {
265                                     case 'e':
266                                         switch (name[9]) {
267                                         case 'P':
268                                             switch (name[10]) {
269                                             case 'i':
270                                                 switch (name[11]) {
271                                                 case 'x':
272                                                     switch (name[12]) {
273                                                     case 'e':
274                                                         switch (name[13]) {
275                                                         case 'l':
276                                                             switch (name[14]) {
277                                                             case 'F':
278                                                                 switch (name[15]) {
279                                                                 case 'o':
280                                                                     switch (name[16]) {
281                                                                     case 'r':
282                                                                         switch (name[17]) {
283                                                                         case 'm':
284                                                                             switch (name[18]) {
285                                                                             case 'a':
286                                                                                 switch (name[19]) {
287                                                                                 case 't':
288                                                                                     switch (name[20]) {
289                                                                                     case '\0':
290                                                                                         // wglChoosePixelFormat
291                                                                                         retrace_wglChoosePixelFormat(call);
292                                                                                         return;
293                                                                                         break;
294                                                                                     case 'A':
295                                                                                         if (name[21] == 'R' && name[22] == 'B' && name[23] == '\0') {
296                                                                                             // wglChoosePixelFormatARB
297                                                                                             retrace_wglChoosePixelFormatARB(call);
298                                                                                             return;
299                                                                                         }
300                                                                                         break;
301                                                                                     case 'E':
302                                                                                         if (name[21] == 'X' && name[22] == 'T' && name[23] == '\0') {
303                                                                                             // wglChoosePixelFormatEXT
304                                                                                             retrace_wglChoosePixelFormatEXT(call);
305                                                                                             return;
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                         }
339                         break;
340                     case 'o':
341                         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') {
342                             // wglCopyContext
343                             retrace_wglCopyContext(call);
344                             return;
345                         }
346                         break;
347                     case 'r':
348                         switch (name[5]) {
349                         case 'e':
350                             switch (name[6]) {
351                             case 'a':
352                                 switch (name[7]) {
353                                 case 't':
354                                     switch (name[8]) {
355                                     case 'e':
356                                         switch (name[9]) {
357                                         case 'B':
358                                             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') {
359                                                 // wglCreateBufferRegionARB
360                                                 retrace_wglCreateBufferRegionARB(call);
361                                                 return;
362                                             }
363                                             break;
364                                         case 'C':
365                                             switch (name[10]) {
366                                             case 'o':
367                                                 switch (name[11]) {
368                                                 case 'n':
369                                                     switch (name[12]) {
370                                                     case 't':
371                                                         switch (name[13]) {
372                                                         case 'e':
373                                                             switch (name[14]) {
374                                                             case 'x':
375                                                                 switch (name[15]) {
376                                                                 case 't':
377                                                                     switch (name[16]) {
378                                                                     case '\0':
379                                                                         // wglCreateContext
380                                                                         retrace_wglCreateContext(call);
381                                                                         return;
382                                                                         break;
383                                                                     case 'A':
384                                                                         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') {
385                                                                             // wglCreateContextAttribsARB
386                                                                             retrace_wglCreateContextAttribsARB(call);
387                                                                             return;
388                                                                         }
389                                                                         break;
390                                                                     }
391                                                                     break;
392                                                                 }
393                                                                 break;
394                                                             }
395                                                             break;
396                                                         }
397                                                         break;
398                                                     }
399                                                     break;
400                                                 }
401                                                 break;
402                                             }
403                                             break;
404                                         case 'L':
405                                             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') {
406                                                 // wglCreateLayerContext
407                                                 retrace_wglCreateLayerContext(call);
408                                                 return;
409                                             }
410                                             break;
411                                         case 'P':
412                                             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') {
413                                                 // wglCreatePbufferARB
414                                                 retrace_wglCreatePbufferARB(call);
415                                                 return;
416                                             }
417                                             break;
418                                         }
419                                         break;
420                                     }
421                                     break;
422                                 }
423                                 break;
424                             }
425                             break;
426                         }
427                         break;
428                     }
429                     break;
430                 case 'D':
431                     switch (name[4]) {
432                     case 'e':
433                         switch (name[5]) {
434                         case 'l':
435                             switch (name[6]) {
436                             case 'e':
437                                 switch (name[7]) {
438                                 case 't':
439                                     switch (name[8]) {
440                                     case 'e':
441                                         switch (name[9]) {
442                                         case 'B':
443                                             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') {
444                                                 // wglDeleteBufferRegionARB
445                                                 retrace_wglDeleteBufferRegionARB(call);
446                                                 return;
447                                             }
448                                             break;
449                                         case 'C':
450                                             if (name[10] == 'o' && name[11] == 'n' && name[12] == 't' && name[13] == 'e' && name[14] == 'x' && name[15] == 't' && name[16] == '\0') {
451                                                 // wglDeleteContext
452                                                 retrace_wglDeleteContext(call);
453                                                 return;
454                                             }
455                                             break;
456                                         }
457                                         break;
458                                     }
459                                     break;
460                                 }
461                                 break;
462                             }
463                             break;
464                         case 's':
465                             switch (name[6]) {
466                             case 'c':
467                                 switch (name[7]) {
468                                 case 'r':
469                                     switch (name[8]) {
470                                     case 'i':
471                                         switch (name[9]) {
472                                         case 'b':
473                                             switch (name[10]) {
474                                             case 'e':
475                                                 switch (name[11]) {
476                                                 case 'L':
477                                                     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') {
478                                                         // wglDescribeLayerPlane
479                                                         retrace_wglDescribeLayerPlane(call);
480                                                         return;
481                                                     }
482                                                     break;
483                                                 case 'P':
484                                                     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') {
485                                                         // wglDescribePixelFormat
486                                                         retrace_wglDescribePixelFormat(call);
487                                                         return;
488                                                     }
489                                                     break;
490                                                 }
491                                                 break;
492                                             }
493                                             break;
494                                         }
495                                         break;
496                                     }
497                                     break;
498                                 }
499                                 break;
500                             case 't':
501                                 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') {
502                                     // wglDestroyPbufferARB
503                                     retrace_wglDestroyPbufferARB(call);
504                                     return;
505                                 }
506                                 break;
507                             }
508                             break;
509                         }
510                         break;
511                     }
512                     break;
513                 case 'F':
514                     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') {
515                         // wglFreeMemoryNV
516                         retrace_wglFreeMemoryNV(call);
517                         return;
518                     }
519                     break;
520                 case 'G':
521                     switch (name[4]) {
522                     case 'e':
523                         switch (name[5]) {
524                         case 't':
525                             switch (name[6]) {
526                             case 'C':
527                                 switch (name[7]) {
528                                 case 'u':
529                                     switch (name[8]) {
530                                     case 'r':
531                                         switch (name[9]) {
532                                         case 'r':
533                                             switch (name[10]) {
534                                             case 'e':
535                                                 switch (name[11]) {
536                                                 case 'n':
537                                                     switch (name[12]) {
538                                                     case 't':
539                                                         switch (name[13]) {
540                                                         case 'C':
541                                                             if (name[14] == 'o' && name[15] == 'n' && name[16] == 't' && name[17] == 'e' && name[18] == 'x' && name[19] == 't' && name[20] == '\0') {
542                                                                 // wglGetCurrentContext
543                                                                 return;
544                                                             }
545                                                             break;
546                                                         case 'D':
547                                                             if (name[14] == 'C' && name[15] == '\0') {
548                                                                 // wglGetCurrentDC
549                                                                 return;
550                                                             }
551                                                             break;
552                                                         case 'R':
553                                                             switch (name[14]) {
554                                                             case 'e':
555                                                                 switch (name[15]) {
556                                                                 case 'a':
557                                                                     switch (name[16]) {
558                                                                     case 'd':
559                                                                         switch (name[17]) {
560                                                                         case 'D':
561                                                                             switch (name[18]) {
562                                                                             case 'C':
563                                                                                 switch (name[19]) {
564                                                                                 case 'A':
565                                                                                     if (name[20] == 'R' && name[21] == 'B' && name[22] == '\0') {
566                                                                                         // wglGetCurrentReadDCARB
567                                                                                         return;
568                                                                                     }
569                                                                                     break;
570                                                                                 case 'E':
571                                                                                     if (name[20] == 'X' && name[21] == 'T' && name[22] == '\0') {
572                                                                                         // wglGetCurrentReadDCEXT
573                                                                                         return;
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                                 }
601                                 break;
602                             case 'D':
603                                 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') {
604                                     // wglGetDefaultProcAddress
605                                     return;
606                                 }
607                                 break;
608                             case 'E':
609                                 switch (name[7]) {
610                                 case 'x':
611                                     switch (name[8]) {
612                                     case 't':
613                                         switch (name[9]) {
614                                         case 'e':
615                                             switch (name[10]) {
616                                             case 'n':
617                                                 switch (name[11]) {
618                                                 case 's':
619                                                     switch (name[12]) {
620                                                     case 'i':
621                                                         switch (name[13]) {
622                                                         case 'o':
623                                                             switch (name[14]) {
624                                                             case 'n':
625                                                                 switch (name[15]) {
626                                                                 case 's':
627                                                                     switch (name[16]) {
628                                                                     case 'S':
629                                                                         switch (name[17]) {
630                                                                         case 't':
631                                                                             switch (name[18]) {
632                                                                             case 'r':
633                                                                                 switch (name[19]) {
634                                                                                 case 'i':
635                                                                                     switch (name[20]) {
636                                                                                     case 'n':
637                                                                                         switch (name[21]) {
638                                                                                         case 'g':
639                                                                                             switch (name[22]) {
640                                                                                             case 'A':
641                                                                                                 if (name[23] == 'R' && name[24] == 'B' && name[25] == '\0') {
642                                                                                                     // wglGetExtensionsStringARB
643                                                                                                     return;
644                                                                                                 }
645                                                                                                 break;
646                                                                                             case 'E':
647                                                                                                 if (name[23] == 'X' && name[24] == 'T' && name[25] == '\0') {
648                                                                                                     // wglGetExtensionsStringEXT
649                                                                                                     return;
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                                 }
683                                 break;
684                             case 'L':
685                                 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') {
686                                     // wglGetLayerPaletteEntries
687                                     return;
688                                 }
689                                 break;
690                             case 'P':
691                                 switch (name[7]) {
692                                 case 'b':
693                                     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') {
694                                         // wglGetPbufferDCARB
695                                         retrace_wglGetPbufferDCARB(call);
696                                         return;
697                                     }
698                                     break;
699                                 case 'i':
700                                     switch (name[8]) {
701                                     case 'x':
702                                         switch (name[9]) {
703                                         case 'e':
704                                             switch (name[10]) {
705                                             case 'l':
706                                                 switch (name[11]) {
707                                                 case 'F':
708                                                     switch (name[12]) {
709                                                     case 'o':
710                                                         switch (name[13]) {
711                                                         case 'r':
712                                                             switch (name[14]) {
713                                                             case 'm':
714                                                                 switch (name[15]) {
715                                                                 case 'a':
716                                                                     switch (name[16]) {
717                                                                     case 't':
718                                                                         switch (name[17]) {
719                                                                         case '\0':
720                                                                             // wglGetPixelFormat
721                                                                             return;
722                                                                             break;
723                                                                         case 'A':
724                                                                             switch (name[18]) {
725                                                                             case 't':
726                                                                                 switch (name[19]) {
727                                                                                 case 't':
728                                                                                     switch (name[20]) {
729                                                                                     case 'r':
730                                                                                         switch (name[21]) {
731                                                                                         case 'i':
732                                                                                             switch (name[22]) {
733                                                                                             case 'b':
734                                                                                                 switch (name[23]) {
735                                                                                                 case 'f':
736                                                                                                     switch (name[24]) {
737                                                                                                     case 'v':
738                                                                                                         switch (name[25]) {
739                                                                                                         case 'A':
740                                                                                                             if (name[26] == 'R' && name[27] == 'B' && name[28] == '\0') {
741                                                                                                                 // wglGetPixelFormatAttribfvARB
742                                                                                                                 return;
743                                                                                                             }
744                                                                                                             break;
745                                                                                                         case 'E':
746                                                                                                             if (name[26] == 'X' && name[27] == 'T' && name[28] == '\0') {
747                                                                                                                 // wglGetPixelFormatAttribfvEXT
748                                                                                                                 return;
749                                                                                                             }
750                                                                                                             break;
751                                                                                                         }
752                                                                                                         break;
753                                                                                                     }
754                                                                                                     break;
755                                                                                                 case 'i':
756                                                                                                     switch (name[24]) {
757                                                                                                     case 'v':
758                                                                                                         switch (name[25]) {
759                                                                                                         case 'A':
760                                                                                                             if (name[26] == 'R' && name[27] == 'B' && name[28] == '\0') {
761                                                                                                                 // wglGetPixelFormatAttribivARB
762                                                                                                                 return;
763                                                                                                             }
764                                                                                                             break;
765                                                                                                         case 'E':
766                                                                                                             if (name[26] == 'X' && name[27] == 'T' && name[28] == '\0') {
767                                                                                                                 // wglGetPixelFormatAttribivEXT
768                                                                                                                 return;
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                                     }
806                                     break;
807                                 case 'r':
808                                     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') {
809                                         // wglGetProcAddress
810                                         retrace_wglGetProcAddress(call);
811                                         return;
812                                     }
813                                     break;
814                                 }
815                                 break;
816                             case 'S':
817                                 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') {
818                                     // wglGetSwapIntervalEXT
819                                     return;
820                                 }
821                                 break;
822                             }
823                             break;
824                         }
825                         break;
826                     }
827                     break;
828                 case 'M':
829                     switch (name[4]) {
830                     case 'a':
831                         switch (name[5]) {
832                         case 'k':
833                             switch (name[6]) {
834                             case 'e':
835                                 switch (name[7]) {
836                                 case 'C':
837                                     switch (name[8]) {
838                                     case 'o':
839                                         switch (name[9]) {
840                                         case 'n':
841                                             switch (name[10]) {
842                                             case 't':
843                                                 switch (name[11]) {
844                                                 case 'e':
845                                                     switch (name[12]) {
846                                                     case 'x':
847                                                         switch (name[13]) {
848                                                         case 't':
849                                                             switch (name[14]) {
850                                                             case 'C':
851                                                                 switch (name[15]) {
852                                                                 case 'u':
853                                                                     switch (name[16]) {
854                                                                     case 'r':
855                                                                         switch (name[17]) {
856                                                                         case 'r':
857                                                                             switch (name[18]) {
858                                                                             case 'e':
859                                                                                 switch (name[19]) {
860                                                                                 case 'n':
861                                                                                     switch (name[20]) {
862                                                                                     case 't':
863                                                                                         switch (name[21]) {
864                                                                                         case 'A':
865                                                                                             if (name[22] == 'R' && name[23] == 'B' && name[24] == '\0') {
866                                                                                                 // wglMakeContextCurrentARB
867                                                                                                 retrace_wglMakeContextCurrentARB(call);
868                                                                                                 return;
869                                                                                             }
870                                                                                             break;
871                                                                                         case 'E':
872                                                                                             if (name[22] == 'X' && name[23] == 'T' && name[24] == '\0') {
873                                                                                                 // wglMakeContextCurrentEXT
874                                                                                                 retrace_wglMakeContextCurrentEXT(call);
875                                                                                                 return;
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                                         }
903                                         break;
904                                     case 'u':
905                                         if (name[9] == 'r' && name[10] == 'r' && name[11] == 'e' && name[12] == 'n' && name[13] == 't' && name[14] == '\0') {
906                                             // wglMakeCurrent
907                                             retrace_wglMakeCurrent(call);
908                                             return;
909                                         }
910                                         break;
911                                     }
912                                     break;
913                                 }
914                                 break;
915                             }
916                             break;
917                         }
918                         break;
919                     }
920                     break;
921                 case 'Q':
922                     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') {
923                         // wglQueryPbufferARB
924                         retrace_wglQueryPbufferARB(call);
925                         return;
926                     }
927                     break;
928                 case 'R':
929                     switch (name[4]) {
930                     case 'e':
931                         switch (name[5]) {
932                         case 'a':
933                             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') {
934                                 // wglRealizeLayerPalette
935                                 retrace_wglRealizeLayerPalette(call);
936                                 return;
937                             }
938                             break;
939                         case 'l':
940                             switch (name[6]) {
941                             case 'e':
942                                 switch (name[7]) {
943                                 case 'a':
944                                     switch (name[8]) {
945                                     case 's':
946                                         switch (name[9]) {
947                                         case 'e':
948                                             switch (name[10]) {
949                                             case 'P':
950                                                 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') {
951                                                     // wglReleasePbufferDCARB
952                                                     retrace_wglReleasePbufferDCARB(call);
953                                                     return;
954                                                 }
955                                                 break;
956                                             case 'T':
957                                                 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') {
958                                                     // wglReleaseTexImageARB
959                                                     retrace_wglReleaseTexImageARB(call);
960                                                     return;
961                                                 }
962                                                 break;
963                                             }
964                                             break;
965                                         }
966                                         break;
967                                     }
968                                     break;
969                                 }
970                                 break;
971                             }
972                             break;
973                         case 's':
974                             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') {
975                                 // wglRestoreBufferRegionARB
976                                 retrace_wglRestoreBufferRegionARB(call);
977                                 return;
978                             }
979                             break;
980                         }
981                         break;
982                     }
983                     break;
984                 case 'S':
985                     switch (name[4]) {
986                     case 'a':
987                         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') {
988                             // wglSaveBufferRegionARB
989                             retrace_wglSaveBufferRegionARB(call);
990                             return;
991                         }
992                         break;
993                     case 'e':
994                         switch (name[5]) {
995                         case 't':
996                             switch (name[6]) {
997                             case 'L':
998                                 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') {
999                                     // wglSetLayerPaletteEntries
1000                                     retrace_wglSetLayerPaletteEntries(call);
1001                                     return;
1002                                 }
1003                                 break;
1004                             case 'P':
1005                                 switch (name[7]) {
1006                                 case 'b':
1007                                     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') {
1008                                         // wglSetPbufferAttribARB
1009                                         retrace_wglSetPbufferAttribARB(call);
1010                                         return;
1011                                     }
1012                                     break;
1013                                 case 'i':
1014                                     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') {
1015                                         // wglSetPixelFormat
1016                                         retrace_wglSetPixelFormat(call);
1017                                         return;
1018                                     }
1019                                     break;
1020                                 }
1021                                 break;
1022                             }
1023                             break;
1024                         }
1025                         break;
1026                     case 'h':
1027                         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') {
1028                             // wglShareLists
1029                             retrace_wglShareLists(call);
1030                             return;
1031                         }
1032                         break;
1033                     case 'w':
1034                         switch (name[5]) {
1035                         case 'a':
1036                             switch (name[6]) {
1037                             case 'p':
1038                                 switch (name[7]) {
1039                                 case 'B':
1040                                     if (name[8] == 'u' && name[9] == 'f' && name[10] == 'f' && name[11] == 'e' && name[12] == 'r' && name[13] == 's' && name[14] == '\0') {
1041                                         // wglSwapBuffers
1042                                         retrace_wglSwapBuffers(call);
1043                                         return;
1044                                     }
1045                                     break;
1046                                 case 'I':
1047                                     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') {
1048                                         // wglSwapIntervalEXT
1049                                         retrace_wglSwapIntervalEXT(call);
1050                                         return;
1051                                     }
1052                                     break;
1053                                 case 'L':
1054                                     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') {
1055                                         // wglSwapLayerBuffers
1056                                         retrace_wglSwapLayerBuffers(call);
1057                                         return;
1058                                     }
1059                                     break;
1060                                 case 'M':
1061                                     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') {
1062                                         // wglSwapMultipleBuffers
1063                                         retrace_wglSwapMultipleBuffers(call);
1064                                         return;
1065                                     }
1066                                     break;
1067                                 }
1068                                 break;
1069                             }
1070                             break;
1071                         }
1072                         break;
1073                     }
1074                     break;
1075                 case 'U':
1076                     switch (name[4]) {
1077                     case 's':
1078                         switch (name[5]) {
1079                         case 'e':
1080                             switch (name[6]) {
1081                             case 'F':
1082                                 switch (name[7]) {
1083                                 case 'o':
1084                                     switch (name[8]) {
1085                                     case 'n':
1086                                         switch (name[9]) {
1087                                         case 't':
1088                                             switch (name[10]) {
1089                                             case 'B':
1090                                                 switch (name[11]) {
1091                                                 case 'i':
1092                                                     switch (name[12]) {
1093                                                     case 't':
1094                                                         switch (name[13]) {
1095                                                         case 'm':
1096                                                             switch (name[14]) {
1097                                                             case 'a':
1098                                                                 switch (name[15]) {
1099                                                                 case 'p':
1100                                                                     switch (name[16]) {
1101                                                                     case 's':
1102                                                                         switch (name[17]) {
1103                                                                         case 'A':
1104                                                                             if (name[18] == '\0') {
1105                                                                                 // wglUseFontBitmapsA
1106                                                                                 retrace_wglUseFontBitmapsA(call);
1107                                                                                 return;
1108                                                                             }
1109                                                                             break;
1110                                                                         case 'W':
1111                                                                             if (name[18] == '\0') {
1112                                                                                 // wglUseFontBitmapsW
1113                                                                                 retrace_wglUseFontBitmapsW(call);
1114                                                                                 return;
1115                                                                             }
1116                                                                             break;
1117                                                                         }
1118                                                                         break;
1119                                                                     }
1120                                                                     break;
1121                                                                 }
1122                                                                 break;
1123                                                             }
1124                                                             break;
1125                                                         }
1126                                                         break;
1127                                                     }
1128                                                     break;
1129                                                 }
1130                                                 break;
1131                                             case 'O':
1132                                                 switch (name[11]) {
1133                                                 case 'u':
1134                                                     switch (name[12]) {
1135                                                     case 't':
1136                                                         switch (name[13]) {
1137                                                         case 'l':
1138                                                             switch (name[14]) {
1139                                                             case 'i':
1140                                                                 switch (name[15]) {
1141                                                                 case 'n':
1142                                                                     switch (name[16]) {
1143                                                                     case 'e':
1144                                                                         switch (name[17]) {
1145                                                                         case 's':
1146                                                                             switch (name[18]) {
1147                                                                             case 'A':
1148                                                                                 if (name[19] == '\0') {
1149                                                                                     // wglUseFontOutlinesA
1150                                                                                     retrace_wglUseFontOutlinesA(call);
1151                                                                                     return;
1152                                                                                 }
1153                                                                                 break;
1154                                                                             case 'W':
1155                                                                                 if (name[19] == '\0') {
1156                                                                                     // wglUseFontOutlinesW
1157                                                                                     retrace_wglUseFontOutlinesW(call);
1158                                                                                     return;
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         break;
1197     }
1198     retrace::retrace_unknown(call);
1199 }
1200