1 /* Copyright © 2013, Intel Corporation
3 * Permission is hereby granted, free of charge, to any person obtaining a copy
4 * of this software and associated documentation files (the "Software"), to deal
5 * in the Software without restriction, including without limitation the rights
6 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 * copies of the Software, and to permit persons to whom the Software is
8 * furnished to do so, subject to the following conditions:
10 * The above copyright notice and this permission notice shall be included in
11 * all copies or substantial portions of the Software.
13 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24 /* The prototypes for some OpenGL functions changed at one point from:
26 * const void* *indices
28 * const void* const coist *indices
30 * This makes it difficult for us to provide an implementation of
31 * these functions that is consistent with the locally-available gl.h
32 * since we don't know if the extra const will be present or not.
34 * To workaround this problem, we simply #define away const altogether
35 * before including gl.h.
37 * Kudos to Keith Packard for suggesting this kludge.
41 #define GL_GLEXT_PROTOTYPES
50 /* The first appearance of the GLfixed datatype in Mesa was with
51 * glext.h of version 20130624. So we'll assume that any older glext.h
52 * cannot have any function accepting a GLfixed parameter. */
53 #if GL_GLEXT_VERSION >= 20130624
54 #define HAVE_GLFIXED 1
57 /* As of glext.h version 20131008 some types changed.
59 * I have no idea why some internalFormats changed from GLenum to
60 * GLint while others changed from GLint to GLenum.
62 * But, in order to compile with either version, we track these.
64 #if GL_GLEXT_VERSION >= 20131008
65 #define GLint_or_enum GLenum
66 #define GLenum_or_int GLint
68 #define GLint_or_enum GLint
69 #define GLenum_or_int GLenum
72 static void *gl_handle;
74 /* Switch metrics operation persistently, (until next SWITCH) */
75 #define SWITCH_METRICS_OP(op) \
76 context_counter_stop (); \
77 context_set_current_op (op); \
78 context_counter_start ();
80 /* Switch metrics operation temporarily, see RESTORE_METRICS_OP */
81 #define SAVE_THEN_SWITCH_METRICS_OP(op) \
82 metrics_op_t save = context_get_current_op (); \
83 SWITCH_METRICS_OP (op);
85 /* Switch back to metrics operation saved by SAVE_THEN_SWITCH_METRICS_OP */
86 #define RESTORE_METRICS_OP() \
87 SWITCH_METRICS_OP (save);
90 glwrap_set_gl_handle (void *handle)
92 if (gl_handle == NULL)
97 glwrap_lookup (char *name)
101 /* We don't call dlopen here to find the library in which to
102 * perform a dlsym lookup. That's because the application may
103 * be loading libGL.so or libGLESv2.so for its OpenGL symbols.
105 * So we instead watch for one of those filenames to go by in
106 * our dlopen wrapper, which will then call
107 * glwrap_set_gl_handle to give us the handle to use here.
109 * If the application hasn't called dlopen on a "libGL"
110 * library, then presumably the application is linked directly
111 * to an OpenGL implementation. In this case, we can use
112 * RTLD_NEXT to find the symbol.
114 * But just in case, we also let the user override that by
115 * specifying the FIPS_LIBGL environment variable to the path
116 * of the real libGL.so library that fips should dlopen here.
118 if (gl_handle == NULL) {
121 path = getenv ("FIPS_LIBGL");
123 path = getenv ("GLAZE_LIBGL");
125 gl_handle = dlopen (path, RTLD_LAZY);
127 if (gl_handle == NULL) {
128 fprintf (stderr, "Failed to dlopen FIPS_LIBGL: "
133 gl_handle = RTLD_NEXT;
137 ret = dlwrap_real_dlsym (gl_handle, name);
140 fprintf (stderr, "fips: Error: glwrap_lookup failed to dlsym %s\n",
148 /* With a program change, we stop the counter, update the
149 * active program, then start the counter up again. */
151 glUseProgram (GLuint program)
153 SWITCH_METRICS_OP (METRICS_OP_SHADER + program);
155 GLWRAP_DEFER(glUseProgram, program);
159 glUseProgramObjectARB (GLhandleARB programObj)
161 SWITCH_METRICS_OP (METRICS_OP_SHADER + programObj);
163 GLWRAP_DEFER(glUseProgramObjectARB, programObj);
166 /* METRICS_OP_ACCUM */
168 glAccum (GLenum op, GLfloat value)
170 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_ACCUM);
172 GLWRAP_DEFER (glAccum, op, value);
174 RESTORE_METRICS_OP ();
178 glClearAccum (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
180 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_ACCUM);
182 GLWRAP_DEFER (glClearAccum, red, green, blue, alpha);
184 RESTORE_METRICS_OP ();
189 glClearAccumxOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha)
191 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_ACCUM);
193 GLWRAP_DEFER (glClearAccumxOES, red, green, blue, alpha);
195 RESTORE_METRICS_OP ();
199 /* METRICS_OP_BUFFER_DATA */
201 glBufferData (GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage)
203 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_BUFFER_DATA);
205 GLWRAP_DEFER (glBufferData, target, size, data, usage);
207 RESTORE_METRICS_OP ();
211 glNamedBufferDataEXT (GLuint buffer, GLsizeiptr size, const GLvoid *data,
214 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_BUFFER_DATA);
216 GLWRAP_DEFER (glNamedBufferDataEXT, buffer, size, data, usage);
218 RESTORE_METRICS_OP ();
222 glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size,
225 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_BUFFER_DATA);
227 GLWRAP_DEFER (glBufferSubData, target, offset, size, data);
229 RESTORE_METRICS_OP ();
233 glNamedBufferSubDataEXT (GLuint buffer, GLintptr offset, GLsizeiptr size,
236 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_BUFFER_DATA);
238 GLWRAP_DEFER (glNamedBufferSubDataEXT, buffer, offset, size, data);
240 RESTORE_METRICS_OP ();
244 glMapBuffer (GLenum target, GLenum access)
248 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_BUFFER_DATA);
250 GLWRAP_DEFER_WITH_RETURN (ret, glMapBuffer, target, access);
252 RESTORE_METRICS_OP ();
258 glMapBufferARB (GLenum target, GLenum access)
262 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_BUFFER_DATA);
264 GLWRAP_DEFER_WITH_RETURN (ret, glMapBufferARB, target, access);
266 RESTORE_METRICS_OP ();
272 glMapBufferRange (GLenum target, GLintptr offset, GLsizeiptr length,
277 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_BUFFER_DATA);
279 GLWRAP_DEFER_WITH_RETURN (ret, glMapBufferRange, target, offset,
282 RESTORE_METRICS_OP ();
288 glUnmapBuffer (GLenum target)
292 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_BUFFER_DATA);
294 GLWRAP_DEFER_WITH_RETURN (ret, glUnmapBuffer, target);
296 RESTORE_METRICS_OP ();
302 glUnmapNamedBufferEXT (GLuint buffer)
306 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_BUFFER_DATA);
308 GLWRAP_DEFER_WITH_RETURN (ret, glUnmapNamedBufferEXT, buffer);
310 RESTORE_METRICS_OP ();
316 glUnmapBufferARB (GLenum target)
320 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_BUFFER_DATA);
322 GLWRAP_DEFER_WITH_RETURN (ret, glUnmapBufferARB, target);
324 RESTORE_METRICS_OP ();
330 glFlushMappedBufferRange (GLenum target, GLintptr offset, GLsizeiptr length)
332 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_BUFFER_DATA);
334 GLWRAP_DEFER (glFlushMappedBufferRange, target, offset, length);
336 RESTORE_METRICS_OP ();
340 glFlushMappedBufferRangeAPPLE (GLenum target, GLintptr offset, GLsizeiptr size)
342 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_BUFFER_DATA);
344 GLWRAP_DEFER (glFlushMappedBufferRangeAPPLE, target, offset, size);
346 RESTORE_METRICS_OP ();
350 glFlushMappedNamedBufferRangeEXT (GLuint buffer, GLintptr offset,
353 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_BUFFER_DATA);
355 GLWRAP_DEFER (glFlushMappedNamedBufferRangeEXT, buffer, offset, length);
357 RESTORE_METRICS_OP ();
361 glMapNamedBufferEXT (GLuint buffer, GLenum access)
365 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_BUFFER_DATA);
367 GLWRAP_DEFER_WITH_RETURN (ret, glMapNamedBufferEXT, buffer, access);
369 RESTORE_METRICS_OP ();
375 glMapNamedBufferRangeEXT (GLuint buffer, GLintptr offset, GLsizeiptr length,
380 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_BUFFER_DATA);
382 GLWRAP_DEFER_WITH_RETURN (ret, glMapNamedBufferRangeEXT, buffer,
383 offset, length, access);
385 RESTORE_METRICS_OP ();
390 /* METRICS_OP_BUFFER_SUB_DATA */
392 glCopyBufferSubData (GLenum readTarget, GLenum writeTarget,
393 GLintptr readOffset, GLintptr writeOffset,
396 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_BUFFER_SUB_DATA);
398 GLWRAP_DEFER (glCopyBufferSubData, readTarget, writeTarget,
399 readOffset, writeOffset, size);
401 RESTORE_METRICS_OP ();
405 glNamedCopyBufferSubDataEXT (GLuint readBuffer, GLuint writeBuffer,
406 GLintptr readOffset, GLintptr writeOffset,
409 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_BUFFER_SUB_DATA);
411 GLWRAP_DEFER (glNamedCopyBufferSubDataEXT, readBuffer,
412 writeBuffer, readOffset, writeOffset, size);
414 RESTORE_METRICS_OP ();
417 /* METRICS_OP_BITMAP */
419 glBitmap (GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig,
420 GLfloat xmove, GLfloat ymove, const GLubyte *bitmap)
422 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_BITMAP);
424 GLWRAP_DEFER (glBitmap, width, height, xorig, yorig,
425 xmove, ymove, bitmap);
427 RESTORE_METRICS_OP ();
432 glBitmapxOES (GLsizei width, GLsizei height, GLfixed xorig, GLfixed yorig,
433 GLfixed xmove, GLfixed ymove, const GLubyte *bitmap)
435 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_BITMAP);
437 GLWRAP_DEFER (glBitmapxOES, width, height, xorig, yorig,
438 xmove, ymove, bitmap);
440 RESTORE_METRICS_OP ();
444 /* METRICS_OP_BLIT_FRAMEBUFFER */
446 glBlitFramebuffer (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
447 GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
448 GLbitfield mask, GLenum filter)
450 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_BLIT_FRAMEBUFFER);
452 GLWRAP_DEFER (glBlitFramebuffer, srcX0, srcY0, srcX1, srcY1,
453 dstX0, dstY0, dstX1, dstY1, mask, filter);
455 RESTORE_METRICS_OP ();
459 glBlitFramebufferEXT (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
460 GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
461 GLbitfield mask, GLenum filter)
463 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_BLIT_FRAMEBUFFER);
465 GLWRAP_DEFER (glBlitFramebufferEXT, srcX0, srcY0, srcX1, srcY1,
466 dstX0, dstY0, dstX1, dstY1, mask, filter);
468 RESTORE_METRICS_OP ();
471 /* METRICS_OP_CLEAR */
473 glClear (GLbitfield mask)
475 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_CLEAR);
477 GLWRAP_DEFER (glClear, mask);
479 RESTORE_METRICS_OP ();
483 glClearBufferfi (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil)
485 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_CLEAR);
487 GLWRAP_DEFER (glClearBufferfi, buffer, drawbuffer, depth, stencil);
489 RESTORE_METRICS_OP ();
493 glClearBufferfv (GLenum buffer, GLint drawbuffer, const GLfloat *value)
495 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_CLEAR);
497 GLWRAP_DEFER (glClearBufferfv, buffer, drawbuffer, value);
499 RESTORE_METRICS_OP ();
503 glClearBufferiv (GLenum buffer, GLint drawbuffer, const GLint *value)
505 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_CLEAR);
507 GLWRAP_DEFER (glClearBufferiv, buffer, drawbuffer, value);
509 RESTORE_METRICS_OP ();
513 glClearBufferuiv (GLenum buffer, GLint drawbuffer, const GLuint *value)
515 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_CLEAR);
517 GLWRAP_DEFER (glClearBufferuiv, buffer, drawbuffer, value);
519 RESTORE_METRICS_OP ();
522 /* METRICS_OP_CLEAR_BUFFER_DATA */
525 glClearBufferData (GLenum target, GLenum internalformat, GLenum format,
526 GLenum type, const void *data)
528 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_CLEAR_BUFFER_DATA);
530 GLWRAP_DEFER (glClearBufferData, target, internalformat, format,
533 RESTORE_METRICS_OP ();
537 glClearBufferSubData (GLenum target, GLenum internalformat, GLintptr offset,
538 GLsizeiptr size, GLenum format, GLenum type,
541 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_CLEAR_BUFFER_DATA);
543 GLWRAP_DEFER (glClearBufferSubData, target, internalformat,
544 offset, size, format, type, data);
546 RESTORE_METRICS_OP ();
550 glClearNamedBufferDataEXT (GLuint buffer, GLenum internalformat, GLenum format,
551 GLenum type, const void *data)
553 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_CLEAR_BUFFER_DATA);
555 GLWRAP_DEFER (glClearNamedBufferDataEXT, buffer, internalformat,
558 RESTORE_METRICS_OP ();
562 glClearNamedBufferSubDataEXT (GLuint buffer, GLenum internalformat,
563 GLenum format, GLenum type, GLsizeiptr offset,
564 GLsizeiptr size, const void *data)
566 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_CLEAR_BUFFER_DATA);
568 GLWRAP_DEFER (glClearNamedBufferSubDataEXT, buffer,
569 internalformat, format, type, offset, size, data);
571 RESTORE_METRICS_OP ();
574 /* METRICS_OP_CLEAR_TEX_IMAGE */
577 /* METRICS_OP_COPY_PIXELS */
579 glCopyPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum type )
581 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_COPY_PIXELS);
583 GLWRAP_DEFER (glCopyPixels, x, y, width, height, type);
585 RESTORE_METRICS_OP ();
588 /* METRICS_OP_COPY_TEX_IMAGE */
590 glCopyTexImage1D (GLenum target, GLint level, GLenum internalformat,
591 GLint x, GLint y, GLsizei width, GLint border)
593 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_COPY_TEX_IMAGE);
595 GLWRAP_DEFER (glCopyTexImage1D, target, level, internalformat,
596 x, y, width, border);
598 RESTORE_METRICS_OP ();
602 glCopyTexImage1DEXT (GLenum target, GLint level, GLenum internalformat,
603 GLint x, GLint y, GLsizei width, GLint border)
605 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_COPY_TEX_IMAGE);
607 GLWRAP_DEFER (glCopyTexImage1DEXT, target, level, internalformat,
608 x, y, width, border);
610 RESTORE_METRICS_OP ();
614 glCopyTexImage2D (GLenum target, GLint level, GLenum internalformat,
615 GLint x, GLint y, GLsizei width, GLsizei height,
618 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_COPY_TEX_IMAGE);
620 GLWRAP_DEFER (glCopyTexImage2D, target, level, internalformat,
621 x, y, width, height, border);
623 RESTORE_METRICS_OP ();
627 glCopyTexImage2DEXT (GLenum target, GLint level, GLenum internalformat,
628 GLint x, GLint y, GLsizei width, GLsizei height,
631 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_COPY_TEX_IMAGE);
633 GLWRAP_DEFER (glCopyTexImage2DEXT, target, level, internalformat,
634 x, y, width, height, border);
636 RESTORE_METRICS_OP ();
640 glCopyTexSubImage1D (GLenum target, GLint level, GLint xoffset,
641 GLint x, GLint y, GLsizei width)
643 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_COPY_TEX_IMAGE);
645 GLWRAP_DEFER (glCopyTexSubImage1D, target, level, xoffset,
648 RESTORE_METRICS_OP ();
652 glCopyTexSubImage1DEXT (GLenum target, GLint level, GLint xoffset,
653 GLint x, GLint y, GLsizei width)
655 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_COPY_TEX_IMAGE);
657 GLWRAP_DEFER (glCopyTexSubImage1DEXT, target, level, xoffset,
660 RESTORE_METRICS_OP ();
664 glCopyTexSubImage2D (GLenum target, GLint level, GLint xoffset,
665 GLint yoffset, GLint x, GLint y, GLsizei width,
668 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_COPY_TEX_IMAGE);
670 GLWRAP_DEFER (glCopyTexSubImage2D, target, level, xoffset, yoffset,
671 x, y, width, height);
673 RESTORE_METRICS_OP ();
677 glCopyTexSubImage2DEXT (GLenum target, GLint level, GLint xoffset,
678 GLint yoffset, GLint x, GLint y, GLsizei width,
681 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_COPY_TEX_IMAGE);
683 GLWRAP_DEFER (glCopyTexSubImage2DEXT, target, level, xoffset, yoffset,
684 x, y, width, height);
686 RESTORE_METRICS_OP ();
690 glCopyTexSubImage3D (GLenum target, GLint level, GLint xoffset,
691 GLint yoffset, GLint zoffset, GLint x, GLint y,
692 GLsizei width, GLsizei height)
694 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_COPY_TEX_IMAGE);
696 GLWRAP_DEFER (glCopyTexSubImage3D, target, level, xoffset, yoffset,
697 zoffset, x, y, width, height);
699 RESTORE_METRICS_OP ();
703 glCopyTexSubImage3DEXT (GLenum target, GLint level, GLint xoffset,
704 GLint yoffset, GLint zoffset, GLint x, GLint y,
705 GLsizei width, GLsizei height)
707 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_COPY_TEX_IMAGE);
709 GLWRAP_DEFER (glCopyTexSubImage3DEXT, target, level, xoffset, yoffset,
710 zoffset, x, y, width, height);
712 RESTORE_METRICS_OP ();
716 glCopyTextureImage1DEXT (GLuint texture, GLenum target, GLint level,
717 GLenum internalformat, GLint x, GLint y,
718 GLsizei width, GLint border)
720 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_COPY_TEX_IMAGE);
722 GLWRAP_DEFER (glCopyTextureImage1DEXT, texture, target, level,
723 internalformat, x, y, width, border);
725 RESTORE_METRICS_OP ();
729 glCopyTextureImage2DEXT (GLuint texture, GLenum target, GLint level,
730 GLenum internalformat, GLint x, GLint y, GLsizei width,
731 GLsizei height, GLint border)
733 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_COPY_TEX_IMAGE);
735 GLWRAP_DEFER (glCopyTextureImage2DEXT, texture, target,
736 level, internalformat, x, y, width, height, border);
738 RESTORE_METRICS_OP ();
742 glCopyTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level,
743 GLint xoffset, GLint x, GLint y, GLsizei width)
745 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_COPY_TEX_IMAGE);
747 GLWRAP_DEFER (glCopyTextureSubImage1DEXT, texture, target, level,
748 xoffset, x, y, width);
750 RESTORE_METRICS_OP ();
754 glCopyTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level,
755 GLint xoffset, GLint yoffset, GLint x, GLint y,
756 GLsizei width, GLsizei height)
758 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_COPY_TEX_IMAGE);
760 GLWRAP_DEFER (glCopyTextureSubImage2DEXT, texture, target, level,
761 xoffset, yoffset, x, y, width, height);
763 RESTORE_METRICS_OP ();
767 glCopyTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level,
768 GLint xoffset, GLint yoffset, GLint zoffset,
769 GLint x, GLint y, GLsizei width, GLsizei height)
771 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_COPY_TEX_IMAGE);
773 GLWRAP_DEFER (glCopyTextureSubImage3DEXT, texture, target, level,
774 xoffset, yoffset, zoffset, x, y, width, height);
776 RESTORE_METRICS_OP ();
780 glCopyMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level,
781 GLenum internalformat, GLint x, GLint y,
782 GLsizei width, GLint border)
784 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_COPY_TEX_IMAGE);
786 GLWRAP_DEFER (glCopyMultiTexImage1DEXT, texunit, target, level,
787 internalformat, x, y, width, border);
789 RESTORE_METRICS_OP ();
793 glCopyMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level,
794 GLenum internalformat, GLint x, GLint y,
795 GLsizei width, GLsizei height, GLint border)
797 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_COPY_TEX_IMAGE);
799 GLWRAP_DEFER (glCopyMultiTexImage2DEXT, texunit, target, level,
800 internalformat, x, y, width, height, border);
802 RESTORE_METRICS_OP ();
806 glCopyMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level,
807 GLint xoffset, GLint x, GLint y, GLsizei width)
809 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_COPY_TEX_IMAGE);
811 GLWRAP_DEFER (glCopyMultiTexSubImage1DEXT, texunit, target, level,
812 xoffset, x, y, width);
814 RESTORE_METRICS_OP ();
818 glCopyMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level,
819 GLint xoffset, GLint yoffset, GLint x, GLint y,
820 GLsizei width, GLsizei height)
822 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_COPY_TEX_IMAGE);
824 GLWRAP_DEFER (glCopyMultiTexSubImage2DEXT, texunit, target, level,
825 xoffset, yoffset, x, y, width, height);
827 RESTORE_METRICS_OP ();
831 glCopyMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level,
832 GLint xoffset, GLint yoffset, GLint zoffset,
833 GLint x, GLint y, GLsizei width, GLsizei height)
835 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_COPY_TEX_IMAGE);
837 GLWRAP_DEFER (glCopyMultiTexSubImage3DEXT, texunit, target, level,
838 xoffset, yoffset, zoffset, x, y, width, height);
840 RESTORE_METRICS_OP ();
843 /* METRICS_OP_DRAW_PIXELS */
845 glDrawPixels (GLsizei width, GLsizei height, GLenum format, GLenum type,
846 const GLvoid *pixels)
848 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_DRAW_PIXELS);
850 GLWRAP_DEFER (glDrawPixels, width, height, format, type, pixels);
852 RESTORE_METRICS_OP ();
855 /* METRICS_OP_GET_TEX_IMAGE */
858 glGetCompressedMultiTexImageEXT (GLenum texunit, GLenum target,
859 GLint lod, GLvoid *img)
861 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_GET_TEX_IMAGE);
863 GLWRAP_DEFER (glGetCompressedMultiTexImageEXT, texunit,
866 RESTORE_METRICS_OP ();
870 glGetCompressedTexImage (GLenum target, GLint level, GLvoid *img)
872 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_GET_TEX_IMAGE);
874 GLWRAP_DEFER (glGetCompressedTexImage, target, level, img);
876 RESTORE_METRICS_OP ();
880 glGetCompressedTexImageARB (GLenum target, GLint level, GLvoid *img)
882 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_GET_TEX_IMAGE);
884 GLWRAP_DEFER (glGetCompressedTexImageARB, target, level, img);
886 RESTORE_METRICS_OP ();
890 glGetCompressedTextureImageEXT (GLuint texture, GLenum target,
891 GLint lod, GLvoid *img)
893 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_GET_TEX_IMAGE);
895 GLWRAP_DEFER (glGetCompressedTextureImageEXT, texture,
898 RESTORE_METRICS_OP ();
902 glGetMultiTexImageEXT (GLenum texunit, GLenum target, GLint level,
903 GLenum format, GLenum type, GLvoid *pixels)
905 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_GET_TEX_IMAGE);
907 GLWRAP_DEFER (glGetMultiTexImageEXT, texunit,
908 target, level, format, type, pixels);
910 RESTORE_METRICS_OP ();
914 glGetnCompressedTexImageARB (GLenum target, GLint lod,
915 GLsizei bufSize, GLvoid *img)
917 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_GET_TEX_IMAGE);
919 GLWRAP_DEFER (glGetnCompressedTexImageARB, target, lod, bufSize, img);
921 RESTORE_METRICS_OP ();
925 glGetnTexImageARB (GLenum target, GLint level, GLenum format,
926 GLenum type, GLsizei bufSize, GLvoid *img)
928 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_GET_TEX_IMAGE);
930 GLWRAP_DEFER (glGetnTexImageARB, target, level,
931 format, type, bufSize, img);
933 RESTORE_METRICS_OP ();
937 glGetTexImage (GLenum target, GLint level, GLenum format, GLenum type,
940 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_GET_TEX_IMAGE);
942 GLWRAP_DEFER (glGetTexImage, target, level, format, type, pixels);
944 RESTORE_METRICS_OP ();
947 /* METRICS_OP_READ_PIXELS */
949 glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height,
950 GLenum format, GLenum type, GLvoid *pixels )
952 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_READ_PIXELS);
954 GLWRAP_DEFER (glReadPixels, x, y, width, height, format, type, pixels);
956 RESTORE_METRICS_OP ();
960 glReadnPixelsARB (GLint x, GLint y, GLsizei width, GLsizei height,
961 GLenum format, GLenum type, GLsizei bufSize, GLvoid *data)
963 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_READ_PIXELS);
965 GLWRAP_DEFER (glReadnPixelsARB, x, y, width, height,
966 format, type, bufSize, data);
968 RESTORE_METRICS_OP ();
971 /* METRICS_OP_TEX_IMAGE */
973 glTexImage1D (GLenum target, GLint level, GLint internalFormat,
974 GLsizei width, GLint border, GLenum format, GLenum type,
975 const GLvoid *pixels)
977 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
979 GLWRAP_DEFER (glTexImage1D, target, level, internalFormat, width,
980 border, format, type, pixels);
982 RESTORE_METRICS_OP ();
986 glTexImage2D (GLenum target, GLint level, GLint internalFormat,
987 GLsizei width, GLsizei height, GLint border, GLenum format,
988 GLenum type, const GLvoid *pixels )
990 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
992 GLWRAP_DEFER (glTexImage2D, target, level, internalFormat,
993 width, height, border, format, type, pixels);
995 RESTORE_METRICS_OP ();
1000 glTexImage2DMultisample (GLenum target, GLsizei samples,
1001 GLint_or_enum internalformat,
1002 GLsizei width, GLsizei height,
1003 GLboolean fixedsamplelocations)
1005 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1007 GLWRAP_DEFER (glTexImage2DMultisample, target, samples,
1008 internalformat, width, height, fixedsamplelocations);
1010 RESTORE_METRICS_OP ();
1014 glTexImage2DMultisampleCoverageNV (GLenum target, GLsizei coverageSamples,
1015 GLsizei colorSamples, GLint internalFormat,
1016 GLsizei width, GLsizei height,
1017 GLboolean fixedSampleLocations)
1019 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1021 GLWRAP_DEFER (glTexImage2DMultisampleCoverageNV, target,
1022 coverageSamples, colorSamples, internalFormat,
1023 width, height, fixedSampleLocations);
1025 RESTORE_METRICS_OP ();
1029 glTexImage3D (GLenum target, GLint level, GLint internalformat,
1030 GLsizei width, GLsizei height, GLsizei depth, GLint border,
1031 GLenum format, GLenum type, const GLvoid *pixels)
1033 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1035 GLWRAP_DEFER (glTexImage3D, target, level, internalformat,
1036 width, height, depth, border, format, type, pixels);
1038 RESTORE_METRICS_OP ();
1042 glTexImage3DEXT (GLenum target, GLint level, GLenum internalformat,
1043 GLsizei width, GLsizei height, GLsizei depth, GLint border,
1044 GLenum format, GLenum type, const GLvoid *pixels)
1046 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1048 GLWRAP_DEFER (glTexImage3DEXT, target, level, internalformat,
1049 width, height, depth, border, format, type, pixels);
1051 RESTORE_METRICS_OP ();
1055 glTexImage3DMultisample (GLenum target, GLsizei samples,
1056 GLint_or_enum internalformat,
1057 GLsizei width, GLsizei height, GLsizei depth,
1058 GLboolean fixedsamplelocations)
1060 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1062 GLWRAP_DEFER (glTexImage3DMultisample, target, samples,
1063 internalformat, width, height, depth,
1064 fixedsamplelocations);
1066 RESTORE_METRICS_OP ();
1070 glTexImage3DMultisampleCoverageNV (GLenum target, GLsizei coverageSamples,
1071 GLsizei colorSamples, GLint internalFormat,
1072 GLsizei width, GLsizei height, GLsizei depth,
1073 GLboolean fixedSampleLocations)
1075 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1077 GLWRAP_DEFER (glTexImage3DMultisampleCoverageNV, target,
1078 coverageSamples, colorSamples, internalFormat,
1079 width, height, depth, fixedSampleLocations);
1081 RESTORE_METRICS_OP ();
1085 glTexImage4DSGIS (GLenum target, GLint level, GLenum internalformat,
1086 GLsizei width, GLsizei height, GLsizei depth,
1087 GLsizei size4d, GLint border, GLenum format,
1088 GLenum type, const GLvoid *pixels)
1090 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1092 GLWRAP_DEFER (glTexImage4DSGIS, target, level,
1093 internalformat, width, height, depth,
1094 size4d, border, format, type, pixels);
1096 RESTORE_METRICS_OP ();
1100 glTexSubImage1D (GLenum target, GLint level, GLint xoffset,
1101 GLsizei width, GLenum format, GLenum type,
1102 const GLvoid *pixels)
1104 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1106 GLWRAP_DEFER (glTexSubImage1D, target, level, xoffset,
1107 width, format, type, pixels);
1109 RESTORE_METRICS_OP ();
1113 glTexSubImage1DEXT (GLenum target, GLint level, GLint xoffset,
1114 GLsizei width, GLenum format, GLenum type,
1115 const GLvoid *pixels)
1117 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1119 GLWRAP_DEFER (glTexSubImage1DEXT, target, level, xoffset,
1120 width, format, type, pixels);
1122 RESTORE_METRICS_OP ();
1126 glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset,
1127 GLsizei width, GLsizei height, GLenum format, GLenum type,
1128 const GLvoid *pixels)
1130 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1132 GLWRAP_DEFER (glTexSubImage2D, target, level, xoffset, yoffset,
1133 width, height, format, type, pixels);
1135 RESTORE_METRICS_OP ();
1139 glTexSubImage2DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset,
1140 GLsizei width, GLsizei height, GLenum format, GLenum type,
1141 const GLvoid *pixels)
1143 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1145 GLWRAP_DEFER (glTexSubImage2DEXT, target, level, xoffset, yoffset,
1146 width, height, format, type, pixels);
1148 RESTORE_METRICS_OP ();
1152 glTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset,
1153 GLint zoffset, GLsizei width, GLsizei height, GLsizei depth,
1154 GLenum format, GLenum type, const GLvoid *pixels)
1156 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1158 GLWRAP_DEFER (glTexSubImage3D, target, level, xoffset, yoffset,
1159 zoffset, width, height, depth, format, type, pixels);
1161 RESTORE_METRICS_OP ();
1165 glTexSubImage3DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset,
1166 GLint zoffset, GLsizei width, GLsizei height, GLsizei depth,
1167 GLenum format, GLenum type, const GLvoid *pixels)
1169 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1171 GLWRAP_DEFER (glTexSubImage3DEXT, target, level, xoffset, yoffset,
1172 zoffset, width, height, depth, format, type, pixels);
1174 RESTORE_METRICS_OP ();
1178 glTexSubImage4DSGIS (GLenum target, GLint level, GLint xoffset, GLint yoffset,
1179 GLint zoffset, GLint woffset, GLsizei width,
1180 GLsizei height, GLsizei depth, GLsizei size4d,
1181 GLenum format, GLenum type, const GLvoid *pixels)
1183 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1185 GLWRAP_DEFER (glTexSubImage4DSGIS, target, level, xoffset,
1186 yoffset, zoffset, woffset, width, height,
1187 depth, size4d, format, type, pixels);
1189 RESTORE_METRICS_OP ();
1193 glCompressedMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level,
1194 GLenum internalformat, GLsizei width,
1195 GLint border, GLsizei imageSize,
1198 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1200 GLWRAP_DEFER (glCompressedMultiTexImage1DEXT, texunit, target,
1201 level, internalformat, width, border, imageSize, bits);
1203 RESTORE_METRICS_OP ();
1207 glCompressedMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level,
1208 GLenum internalformat, GLsizei width,
1209 GLsizei height, GLint border,
1210 GLsizei imageSize, const GLvoid *bits)
1212 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1214 GLWRAP_DEFER (glCompressedMultiTexImage2DEXT, texunit, target, level,
1215 internalformat, width, height, border, imageSize, bits);
1217 RESTORE_METRICS_OP ();
1221 glCompressedMultiTexImage3DEXT (GLenum texunit, GLenum target, GLint level,
1222 GLenum internalformat, GLsizei width,
1223 GLsizei height, GLsizei depth, GLint border,
1224 GLsizei imageSize, const GLvoid *bits)
1226 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1228 GLWRAP_DEFER (glCompressedMultiTexImage3DEXT, texunit, target,
1229 level, internalformat, width, height, depth,
1230 border, imageSize, bits);
1232 RESTORE_METRICS_OP ();
1236 glCompressedMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level,
1237 GLint xoffset, GLsizei width, GLenum format,
1238 GLsizei imageSize, const GLvoid *bits)
1240 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1242 GLWRAP_DEFER (glCompressedMultiTexSubImage1DEXT, texunit, target,
1243 level, xoffset, width, format, imageSize, bits);
1245 RESTORE_METRICS_OP ();
1249 glCompressedMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level,
1250 GLint xoffset, GLint yoffset, GLsizei width,
1251 GLsizei height, GLenum format,
1252 GLsizei imageSize, const GLvoid *bits)
1254 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1256 GLWRAP_DEFER (glCompressedMultiTexSubImage2DEXT, texunit, target, level,
1257 xoffset, yoffset, width, height, format, imageSize, bits);
1259 RESTORE_METRICS_OP ();
1263 glCompressedMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level,
1264 GLint xoffset, GLint yoffset, GLint zoffset,
1265 GLsizei width, GLsizei height, GLsizei depth,
1266 GLenum format, GLsizei imageSize,
1269 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1271 GLWRAP_DEFER (glCompressedMultiTexSubImage3DEXT, texunit, target,
1272 level, xoffset, yoffset, zoffset, width, height,
1273 depth, format, imageSize, bits);
1275 RESTORE_METRICS_OP ();
1279 glCompressedTexImage1D (GLenum target, GLint level, GLenum internalformat,
1280 GLsizei width, GLint border, GLsizei imageSize,
1283 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1285 GLWRAP_DEFER (glCompressedTexImage1D, target, level,
1286 internalformat, width, border, imageSize, data);
1288 RESTORE_METRICS_OP ();
1292 glCompressedTexImage1DARB (GLenum target, GLint level, GLenum internalformat,
1293 GLsizei width, GLint border, GLsizei imageSize,
1296 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1298 GLWRAP_DEFER (glCompressedTexImage1DARB, target, level, internalformat,
1299 width, border, imageSize, data);
1301 RESTORE_METRICS_OP ();
1305 glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat,
1306 GLsizei width, GLsizei height, GLint border,
1307 GLsizei imageSize, const GLvoid *data)
1309 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1311 GLWRAP_DEFER (glCompressedTexImage2D, target, level, internalformat,
1312 width, height, border, imageSize, data);
1314 RESTORE_METRICS_OP ();
1318 glCompressedTexImage2DARB (GLenum target, GLint level, GLenum internalformat,
1319 GLsizei width, GLsizei height, GLint border,
1320 GLsizei imageSize, const GLvoid *data)
1322 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1324 GLWRAP_DEFER (glCompressedTexImage2DARB, target, level, internalformat,
1325 width, height, border, imageSize, data);
1327 RESTORE_METRICS_OP ();
1331 glCompressedTexImage3D (GLenum target, GLint level, GLenum internalformat,
1332 GLsizei width, GLsizei height, GLsizei depth,
1333 GLint border, GLsizei imageSize, const GLvoid *data)
1335 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1337 GLWRAP_DEFER (glCompressedTexImage3D, target, level, internalformat,
1338 width, height, depth, border, imageSize, data);
1340 RESTORE_METRICS_OP ();
1344 glCompressedTexImage3DARB (GLenum target, GLint level, GLenum internalformat,
1345 GLsizei width, GLsizei height, GLsizei depth,
1346 GLint border, GLsizei imageSize, const GLvoid *data)
1348 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1350 GLWRAP_DEFER (glCompressedTexImage3DARB, target, level, internalformat,
1351 width, height, depth, border, imageSize, data);
1353 RESTORE_METRICS_OP ();
1357 glCompressedTexSubImage1D (GLenum target, GLint level, GLint xoffset,
1358 GLsizei width, GLenum format, GLsizei imageSize,
1361 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1363 GLWRAP_DEFER (glCompressedTexSubImage1D, target, level, xoffset,
1364 width, format, imageSize, data);
1366 RESTORE_METRICS_OP ();
1370 glCompressedTexSubImage1DARB (GLenum target, GLint level, GLint xoffset,
1371 GLsizei width, GLenum format, GLsizei imageSize,
1374 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1376 GLWRAP_DEFER (glCompressedTexSubImage1DARB, target, level, xoffset,
1377 width, format, imageSize, data);
1379 RESTORE_METRICS_OP ();
1383 glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset,
1384 GLint yoffset, GLsizei width, GLsizei height,
1385 GLenum format, GLsizei imageSize, const GLvoid *data)
1387 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1389 GLWRAP_DEFER (glCompressedTexSubImage2D, target, level, xoffset,
1390 yoffset, width, height, format, imageSize, data);
1392 RESTORE_METRICS_OP ();
1396 glCompressedTexSubImage2DARB (GLenum target, GLint level, GLint xoffset,
1397 GLint yoffset, GLsizei width, GLsizei height,
1398 GLenum format, GLsizei imageSize,
1401 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1403 GLWRAP_DEFER (glCompressedTexSubImage2DARB, target, level, xoffset,
1404 yoffset, width, height, format, imageSize, data);
1406 RESTORE_METRICS_OP ();
1410 glCompressedTexSubImage3D (GLenum target, GLint level, GLint xoffset,
1411 GLint yoffset, GLint zoffset, GLsizei width,
1412 GLsizei height, GLsizei depth, GLenum format,
1413 GLsizei imageSize, const GLvoid *data)
1415 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1417 GLWRAP_DEFER (glCompressedTexSubImage3D, target, level, xoffset,
1418 yoffset, zoffset, width, height, depth, format,
1421 RESTORE_METRICS_OP ();
1425 glCompressedTexSubImage3DARB (GLenum target, GLint level, GLint xoffset,
1426 GLint yoffset, GLint zoffset, GLsizei width,
1427 GLsizei height, GLsizei depth, GLenum format,
1428 GLsizei imageSize, const GLvoid *data)
1430 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1432 GLWRAP_DEFER (glCompressedTexSubImage3DARB, target, level, xoffset,
1433 yoffset, zoffset, width, height, depth, format,
1436 RESTORE_METRICS_OP ();
1440 glCompressedTextureImage1DEXT (GLuint texture, GLenum target, GLint level,
1441 GLenum internalformat, GLsizei width,
1442 GLint border, GLsizei imageSize,
1445 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1447 GLWRAP_DEFER (glCompressedTextureImage1DEXT, texture, target, level,
1448 internalformat, width, border, imageSize, bits);
1450 RESTORE_METRICS_OP ();
1454 glCompressedTextureImage2DEXT (GLuint texture, GLenum target, GLint level,
1455 GLenum internalformat, GLsizei width,
1456 GLsizei height, GLint border,
1457 GLsizei imageSize, const GLvoid *bits)
1459 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1461 GLWRAP_DEFER (glCompressedTextureImage2DEXT, texture, target, level,
1462 internalformat, width, height, border, imageSize, bits);
1464 RESTORE_METRICS_OP ();
1468 glCompressedTextureImage3DEXT (GLuint texture, GLenum target, GLint level,
1469 GLenum internalformat, GLsizei width,
1470 GLsizei height, GLsizei depth, GLint border,
1471 GLsizei imageSize, const GLvoid *bits)
1473 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1475 GLWRAP_DEFER (glCompressedTextureImage3DEXT, texture, target,
1476 level, internalformat, width, height, depth,
1477 border, imageSize, bits);
1479 RESTORE_METRICS_OP ();
1483 glCompressedTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level,
1484 GLint xoffset, GLsizei width, GLenum format,
1485 GLsizei imageSize, const GLvoid *bits)
1487 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1489 GLWRAP_DEFER (glCompressedTextureSubImage1DEXT, texture, target,
1490 level, xoffset, width, format, imageSize, bits);
1492 RESTORE_METRICS_OP ();
1496 glCompressedTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level,
1497 GLint xoffset, GLint yoffset, GLsizei width,
1498 GLsizei height, GLenum format,
1499 GLsizei imageSize, const GLvoid *bits)
1501 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1503 GLWRAP_DEFER (glCompressedTextureSubImage2DEXT, texture, target, level,
1504 xoffset, yoffset, width, height, format, imageSize, bits);
1506 RESTORE_METRICS_OP ();
1510 glCompressedTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level,
1511 GLint xoffset, GLint yoffset, GLint zoffset,
1512 GLsizei width, GLsizei height, GLsizei depth,
1513 GLenum format, GLsizei imageSize,
1516 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1518 GLWRAP_DEFER (glCompressedTextureSubImage3DEXT, texture, target,
1519 level, xoffset, yoffset, zoffset, width, height,
1520 depth, format, imageSize, bits);
1522 RESTORE_METRICS_OP ();
1526 glMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level,
1527 GLenum_or_int internalformat,
1528 GLsizei width, GLint border,
1529 GLenum format, GLenum type, const GLvoid *pixels)
1531 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1533 GLWRAP_DEFER (glMultiTexImage1DEXT, texunit, target, level,
1534 internalformat, width, border, format, type, pixels);
1536 RESTORE_METRICS_OP ();
1540 glMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level,
1541 GLenum_or_int internalformat,
1542 GLsizei width, GLsizei height,
1543 GLint border, GLenum format, GLenum type,
1544 const GLvoid *pixels)
1546 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1548 GLWRAP_DEFER (glMultiTexImage2DEXT, texunit, target, level,
1549 internalformat, width, height, border, format,
1552 RESTORE_METRICS_OP ();
1556 glMultiTexImage3DEXT (GLenum texunit, GLenum target, GLint level,
1557 GLenum_or_int internalformat,
1558 GLsizei width, GLsizei height,
1559 GLsizei depth, GLint border, GLenum format,
1560 GLenum type, const GLvoid *pixels)
1562 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1564 GLWRAP_DEFER (glMultiTexImage3DEXT, texunit, target, level,
1565 internalformat, width, height, depth, border,
1566 format, type, pixels);
1568 RESTORE_METRICS_OP ();
1572 glMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level,
1573 GLint xoffset, GLsizei width, GLenum format,
1574 GLenum type, const GLvoid *pixels)
1576 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1578 GLWRAP_DEFER (glMultiTexSubImage1DEXT, texunit, target, level,
1579 xoffset, width, format, type, pixels);
1581 RESTORE_METRICS_OP ();
1585 glMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level,
1586 GLint xoffset, GLint yoffset, GLsizei width,
1587 GLsizei height, GLenum format, GLenum type,
1588 const GLvoid *pixels)
1590 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1592 GLWRAP_DEFER (glMultiTexSubImage2DEXT, texunit, target, level, xoffset,
1593 yoffset, width, height, format, type, pixels);
1595 RESTORE_METRICS_OP ();
1599 glMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level,
1600 GLint xoffset, GLint yoffset, GLint zoffset,
1601 GLsizei width, GLsizei height, GLsizei depth,
1602 GLenum format, GLenum type, const GLvoid *pixels)
1604 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1606 GLWRAP_DEFER (glMultiTexSubImage3DEXT, texunit, target, level,
1607 xoffset, yoffset, zoffset, width, height, depth,
1608 format, type, pixels);
1610 RESTORE_METRICS_OP ();