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