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 static void *gl_handle;
52 /* Switch metrics operation persistently, (until next SWITCH) */
53 #define SWITCH_METRICS_OP(op) \
54 metrics_counter_stop (); \
55 metrics_set_current_op (op); \
56 metrics_counter_start ();
58 /* Switch metrics operation temporarily, see RESTORE_METRICS_OP */
59 #define SAVE_THEN_SWITCH_METRICS_OP(op) \
60 metrics_op_t save = metrics_get_current_op (); \
61 SWITCH_METRICS_OP (op);
63 /* Switch back to metrics operation saved by SAVE_THEN_SWITCH_METRICS_OP */
64 #define RESTORE_METRICS_OP(op) \
65 SWITCH_METRICS_OP (save);
68 glwrap_set_gl_handle (void *handle)
70 if (gl_handle == NULL)
75 glwrap_lookup (char *name)
79 /* We don't call dlopen here to find the library in which to
80 * perform a dlsym lookup. That's because the application may
81 * be loading libGL.so or libGLESv2.so for its OpenGL symbols.
83 * So we instead watch for one of those filenames to go by in
84 * our dlopen wrapper, which will then call
85 * glwrap_set_gl_handle to give us the handle to use here.
87 * If the application hasn't called dlopen on a "libGL"
88 * library, then presumably the application is linked directly
89 * to an OpenGL implementation. In this case, we can use
90 * RTLD_NEXT to find the symbol.
92 * But just in case, we also let the user override that by
93 * specifying the FIPS_LIBGL environment variable to the path
94 * of the real libGL.so library that fips should dlopen here.
96 if (gl_handle == NULL) {
99 path = getenv ("FIPS_LIBGL");
101 gl_handle = dlopen (path, RTLD_LAZY);
103 if (gl_handle == NULL) {
104 fprintf (stderr, "Failed to dlopen FIPS_LIBGL: "
109 gl_handle = RTLD_NEXT;
113 ret = dlwrap_real_dlsym (gl_handle, name);
116 fprintf (stderr, "fips: Error: glwrap_lookup failed to dlsym %s\n",
124 /* With a program change, we stop the counter, update the
125 * active program, then start the counter up again. */
127 glUseProgram (GLuint program)
129 SWITCH_METRICS_OP (METRICS_OP_SHADER + program);
131 GLWRAP_DEFER(glUseProgram, program);
135 glUseProgramObjectARB (GLhandleARB programObj)
137 SWITCH_METRICS_OP (METRICS_OP_SHADER + programObj);
139 GLWRAP_DEFER(glUseProgramObjectARB, programObj);
142 /* METRICS_OP_ACCUM */
144 glAccum (GLenum op, GLfloat value)
146 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_ACCUM);
148 GLWRAP_DEFER (glAccum, op, value);
150 RESTORE_METRICS_OP ();
154 glClearAccum (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
156 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_ACCUM);
158 GLWRAP_DEFER (glClearAccum, red, green, blue, alpha);
160 RESTORE_METRICS_OP ();
164 glClearAccumxOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha)
166 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_ACCUM);
168 GLWRAP_DEFER (glClearAccumxOES, red, green, blue, alpha);
170 RESTORE_METRICS_OP ();
173 /* METRICS_OP_BUFFER_DATA */
175 glBufferData (GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage)
177 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_BUFFER_DATA);
179 GLWRAP_DEFER (glBufferData, target, size, data, usage);
181 RESTORE_METRICS_OP ();
185 glNamedBufferDataEXT (GLuint buffer, GLsizeiptr size, const GLvoid *data,
188 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_BUFFER_DATA);
190 GLWRAP_DEFER (glNamedBufferDataEXT, buffer, size, data, usage);
192 RESTORE_METRICS_OP ();
196 glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size,
199 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_BUFFER_DATA);
201 GLWRAP_DEFER (glBufferSubData, target, offset, size, data);
203 RESTORE_METRICS_OP ();
207 glNamedBufferSubDataEXT (GLuint buffer, GLintptr offset, GLsizeiptr size,
210 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_BUFFER_DATA);
212 GLWRAP_DEFER (glNamedBufferSubDataEXT, buffer, offset, size, data);
214 RESTORE_METRICS_OP ();
218 glMapBuffer (GLenum target, GLenum access)
222 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_BUFFER_DATA);
224 GLWRAP_DEFER_WITH_RETURN (ret, glMapBuffer, target, access);
226 RESTORE_METRICS_OP ();
232 glMapBufferARB (GLenum target, GLenum access)
236 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_BUFFER_DATA);
238 GLWRAP_DEFER_WITH_RETURN (ret, glMapBufferARB, target, access);
240 RESTORE_METRICS_OP ();
246 glMapBufferRange (GLenum target, GLintptr offset, GLsizeiptr length,
251 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_BUFFER_DATA);
253 GLWRAP_DEFER_WITH_RETURN (ret, glMapBufferRange, target, offset,
256 RESTORE_METRICS_OP ();
262 glUnmapBuffer (GLenum target)
266 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_BUFFER_DATA);
268 GLWRAP_DEFER_WITH_RETURN (ret, glUnmapBuffer, target);
270 RESTORE_METRICS_OP ();
276 glUnmapNamedBufferEXT (GLuint buffer)
280 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_BUFFER_DATA);
282 GLWRAP_DEFER_WITH_RETURN (ret, glUnmapNamedBufferEXT, buffer);
284 RESTORE_METRICS_OP ();
290 glUnmapBufferARB (GLenum target)
294 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_BUFFER_DATA);
296 GLWRAP_DEFER_WITH_RETURN (ret, glUnmapBufferARB, target);
298 RESTORE_METRICS_OP ();
304 glFlushMappedBufferRange (GLenum target, GLintptr offset, GLsizeiptr length)
306 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_BUFFER_DATA);
308 GLWRAP_DEFER (glFlushMappedBufferRange, target, offset, length);
310 RESTORE_METRICS_OP ();
314 glFlushMappedBufferRangeAPPLE (GLenum target, GLintptr offset, GLsizeiptr size)
316 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_BUFFER_DATA);
318 GLWRAP_DEFER (glFlushMappedBufferRangeAPPLE, target, offset, size);
320 RESTORE_METRICS_OP ();
324 glFlushMappedNamedBufferRangeEXT (GLuint buffer, GLintptr offset,
327 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_BUFFER_DATA);
329 GLWRAP_DEFER (glFlushMappedNamedBufferRangeEXT, buffer, offset, length);
331 RESTORE_METRICS_OP ();
335 glMapNamedBufferEXT (GLuint buffer, GLenum access)
339 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_BUFFER_DATA);
341 GLWRAP_DEFER_WITH_RETURN (ret, glMapNamedBufferEXT, buffer, access);
343 RESTORE_METRICS_OP ();
349 glMapNamedBufferRangeEXT (GLuint buffer, GLintptr offset, GLsizeiptr length,
354 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_BUFFER_DATA);
356 GLWRAP_DEFER_WITH_RETURN (ret, glMapNamedBufferRangeEXT, buffer,
357 offset, length, access);
359 RESTORE_METRICS_OP ();
364 /* METRICS_OP_BUFFER_SUB_DATA */
366 glCopyBufferSubData (GLenum readTarget, GLenum writeTarget,
367 GLintptr readOffset, GLintptr writeOffset,
370 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_BUFFER_SUB_DATA);
372 GLWRAP_DEFER (glCopyBufferSubData, readTarget, writeTarget,
373 readOffset, writeOffset, size);
375 RESTORE_METRICS_OP ();
379 glNamedCopyBufferSubDataEXT (GLuint readBuffer, GLuint writeBuffer,
380 GLintptr readOffset, GLintptr writeOffset,
383 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_BUFFER_SUB_DATA);
385 GLWRAP_DEFER (glNamedCopyBufferSubDataEXT, readBuffer,
386 writeBuffer, readOffset, writeOffset, size);
388 RESTORE_METRICS_OP ();
391 /* METRICS_OP_BITMAP */
393 glBitmap (GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig,
394 GLfloat xmove, GLfloat ymove, const GLubyte *bitmap)
396 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_BITMAP);
398 GLWRAP_DEFER (glBitmap, width, height, xorig, yorig,
399 xmove, ymove, bitmap);
401 RESTORE_METRICS_OP ();
405 glBitmapxOES (GLsizei width, GLsizei height, GLfixed xorig, GLfixed yorig,
406 GLfixed xmove, GLfixed ymove, const GLubyte *bitmap)
408 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_BITMAP);
410 GLWRAP_DEFER (glBitmapxOES, width, height, xorig, yorig,
411 xmove, ymove, bitmap);
413 RESTORE_METRICS_OP ();
416 /* METRICS_OP_BLIT_FRAMEBUFFER */
418 glBlitFramebuffer (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
419 GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
420 GLbitfield mask, GLenum filter)
422 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_BLIT_FRAMEBUFFER);
424 GLWRAP_DEFER (glBlitFramebuffer, srcX0, srcY0, srcX1, srcY1,
425 dstX0, dstY0, dstX1, dstY1, mask, filter);
427 RESTORE_METRICS_OP ();
431 glBlitFramebufferEXT (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
432 GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
433 GLbitfield mask, GLenum filter)
435 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_BLIT_FRAMEBUFFER);
437 GLWRAP_DEFER (glBlitFramebufferEXT, srcX0, srcY0, srcX1, srcY1,
438 dstX0, dstY0, dstX1, dstY1, mask, filter);
440 RESTORE_METRICS_OP ();
443 /* METRICS_OP_CLEAR */
445 glClear (GLbitfield mask)
447 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_CLEAR);
449 GLWRAP_DEFER (glClear, mask);
451 RESTORE_METRICS_OP ();
455 glClearBufferfi (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil)
457 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_CLEAR);
459 GLWRAP_DEFER (glClearBufferfi, buffer, drawbuffer, depth, stencil);
461 RESTORE_METRICS_OP ();
465 glClearBufferfv (GLenum buffer, GLint drawbuffer, const GLfloat *value)
467 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_CLEAR);
469 GLWRAP_DEFER (glClearBufferfv, buffer, drawbuffer, value);
471 RESTORE_METRICS_OP ();
475 glClearBufferiv (GLenum buffer, GLint drawbuffer, const GLint *value)
477 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_CLEAR);
479 GLWRAP_DEFER (glClearBufferiv, buffer, drawbuffer, value);
481 RESTORE_METRICS_OP ();
485 glClearBufferuiv (GLenum buffer, GLint drawbuffer, const GLuint *value)
487 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_CLEAR);
489 GLWRAP_DEFER (glClearBufferuiv, buffer, drawbuffer, value);
491 RESTORE_METRICS_OP ();
494 /* METRICS_OP_CLEAR_BUFFER_DATA */
497 glClearBufferData (GLenum target, GLenum internalformat, GLenum format,
498 GLenum type, const void *data)
500 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_CLEAR_BUFFER_DATA);
502 GLWRAP_DEFER (glClearBufferData, target, internalformat, format,
505 RESTORE_METRICS_OP ();
509 glClearBufferSubData (GLenum target, GLenum internalformat, GLintptr offset,
510 GLsizeiptr size, GLenum format, GLenum type,
513 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_CLEAR_BUFFER_DATA);
515 GLWRAP_DEFER (glClearBufferSubData, target, internalformat,
516 offset, size, format, type, data);
518 RESTORE_METRICS_OP ();
522 glClearNamedBufferDataEXT (GLuint buffer, GLenum internalformat, GLenum format,
523 GLenum type, const void *data)
525 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_CLEAR_BUFFER_DATA);
527 GLWRAP_DEFER (glClearNamedBufferDataEXT, buffer, internalformat,
530 RESTORE_METRICS_OP ();
534 glClearNamedBufferSubDataEXT (GLuint buffer, GLenum internalformat,
535 GLenum format, GLenum type, GLsizeiptr offset,
536 GLsizeiptr size, const void *data)
538 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_CLEAR_BUFFER_DATA);
540 GLWRAP_DEFER (glClearNamedBufferSubDataEXT, buffer,
541 internalformat, format, type, offset, size, data);
543 RESTORE_METRICS_OP ();
546 /* METRICS_OP_CLEAR_TEX_IMAGE */
549 /* METRICS_OP_COPY_PIXELS */
551 glCopyPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum type )
553 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_COPY_PIXELS);
555 GLWRAP_DEFER (glCopyPixels, x, y, width, height, type);
557 RESTORE_METRICS_OP ();
560 /* METRICS_OP_COPY_TEX_IMAGE */
562 glCopyTexImage1D (GLenum target, GLint level, GLenum internalformat,
563 GLint x, GLint y, GLsizei width, GLint border)
565 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_COPY_TEX_IMAGE);
567 GLWRAP_DEFER (glCopyTexImage1D, target, level, internalformat,
568 x, y, width, border);
570 RESTORE_METRICS_OP ();
574 glCopyTexImage1DEXT (GLenum target, GLint level, GLenum internalformat,
575 GLint x, GLint y, GLsizei width, GLint border)
577 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_COPY_TEX_IMAGE);
579 GLWRAP_DEFER (glCopyTexImage1DEXT, target, level, internalformat,
580 x, y, width, border);
582 RESTORE_METRICS_OP ();
586 glCopyTexImage2D (GLenum target, GLint level, GLenum internalformat,
587 GLint x, GLint y, GLsizei width, GLsizei height,
590 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_COPY_TEX_IMAGE);
592 GLWRAP_DEFER (glCopyTexImage2D, target, level, internalformat,
593 x, y, width, height, border);
595 RESTORE_METRICS_OP ();
599 glCopyTexImage2DEXT (GLenum target, GLint level, GLenum internalformat,
600 GLint x, GLint y, GLsizei width, GLsizei height,
603 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_COPY_TEX_IMAGE);
605 GLWRAP_DEFER (glCopyTexImage2DEXT, target, level, internalformat,
606 x, y, width, height, border);
608 RESTORE_METRICS_OP ();
612 glCopyTexSubImage1D (GLenum target, GLint level, GLint xoffset,
613 GLint x, GLint y, GLsizei width)
615 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_COPY_TEX_IMAGE);
617 GLWRAP_DEFER (glCopyTexSubImage1D, target, level, xoffset,
620 RESTORE_METRICS_OP ();
624 glCopyTexSubImage1DEXT (GLenum target, GLint level, GLint xoffset,
625 GLint x, GLint y, GLsizei width)
627 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_COPY_TEX_IMAGE);
629 GLWRAP_DEFER (glCopyTexSubImage1DEXT, target, level, xoffset,
632 RESTORE_METRICS_OP ();
636 glCopyTexSubImage2D (GLenum target, GLint level, GLint xoffset,
637 GLint yoffset, GLint x, GLint y, GLsizei width,
640 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_COPY_TEX_IMAGE);
642 GLWRAP_DEFER (glCopyTexSubImage2D, target, level, xoffset, yoffset,
643 x, y, width, height);
645 RESTORE_METRICS_OP ();
649 glCopyTexSubImage2DEXT (GLenum target, GLint level, GLint xoffset,
650 GLint yoffset, GLint x, GLint y, GLsizei width,
653 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_COPY_TEX_IMAGE);
655 GLWRAP_DEFER (glCopyTexSubImage2DEXT, target, level, xoffset, yoffset,
656 x, y, width, height);
658 RESTORE_METRICS_OP ();
662 glCopyTexSubImage3D (GLenum target, GLint level, GLint xoffset,
663 GLint yoffset, GLint zoffset, GLint x, GLint y,
664 GLsizei width, GLsizei height)
666 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_COPY_TEX_IMAGE);
668 GLWRAP_DEFER (glCopyTexSubImage3D, target, level, xoffset, yoffset,
669 zoffset, x, y, width, height);
671 RESTORE_METRICS_OP ();
675 glCopyTexSubImage3DEXT (GLenum target, GLint level, GLint xoffset,
676 GLint yoffset, GLint zoffset, GLint x, GLint y,
677 GLsizei width, GLsizei height)
679 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_COPY_TEX_IMAGE);
681 GLWRAP_DEFER (glCopyTexSubImage3DEXT, target, level, xoffset, yoffset,
682 zoffset, x, y, width, height);
684 RESTORE_METRICS_OP ();
688 glCopyTextureImage1DEXT (GLuint texture, GLenum target, GLint level,
689 GLenum internalformat, GLint x, GLint y,
690 GLsizei width, GLint border)
692 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_COPY_TEX_IMAGE);
694 GLWRAP_DEFER (glCopyTextureImage1DEXT, texture, target, level,
695 internalformat, x, y, width, border);
697 RESTORE_METRICS_OP ();
701 glCopyTextureImage2DEXT (GLuint texture, GLenum target, GLint level,
702 GLenum internalformat, GLint x, GLint y, GLsizei width,
703 GLsizei height, GLint border)
705 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_COPY_TEX_IMAGE);
707 GLWRAP_DEFER (glCopyTextureImage2DEXT, texture, target,
708 level, internalformat, x, y, width, height, border);
710 RESTORE_METRICS_OP ();
714 glCopyTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level,
715 GLint xoffset, GLint x, GLint y, GLsizei width)
717 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_COPY_TEX_IMAGE);
719 GLWRAP_DEFER (glCopyTextureSubImage1DEXT, texture, target, level,
720 xoffset, x, y, width);
722 RESTORE_METRICS_OP ();
726 glCopyTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level,
727 GLint xoffset, GLint yoffset, GLint x, GLint y,
728 GLsizei width, GLsizei height)
730 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_COPY_TEX_IMAGE);
732 GLWRAP_DEFER (glCopyTextureSubImage2DEXT, texture, target, level,
733 xoffset, yoffset, x, y, width, height);
735 RESTORE_METRICS_OP ();
739 glCopyTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level,
740 GLint xoffset, GLint yoffset, GLint zoffset,
741 GLint x, GLint y, GLsizei width, GLsizei height)
743 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_COPY_TEX_IMAGE);
745 GLWRAP_DEFER (glCopyTextureSubImage3DEXT, texture, target, level,
746 xoffset, yoffset, zoffset, x, y, width, height);
748 RESTORE_METRICS_OP ();
752 glCopyMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level,
753 GLenum internalformat, GLint x, GLint y,
754 GLsizei width, GLint border)
756 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_COPY_TEX_IMAGE);
758 GLWRAP_DEFER (glCopyMultiTexImage1DEXT, texunit, target, level,
759 internalformat, x, y, width, border);
761 RESTORE_METRICS_OP ();
765 glCopyMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level,
766 GLenum internalformat, GLint x, GLint y,
767 GLsizei width, GLsizei height, GLint border)
769 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_COPY_TEX_IMAGE);
771 GLWRAP_DEFER (glCopyMultiTexImage2DEXT, texunit, target, level,
772 internalformat, x, y, width, height, border);
774 RESTORE_METRICS_OP ();
778 glCopyMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level,
779 GLint xoffset, GLint x, GLint y, GLsizei width)
781 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_COPY_TEX_IMAGE);
783 GLWRAP_DEFER (glCopyMultiTexSubImage1DEXT, texunit, target, level,
784 xoffset, x, y, width);
786 RESTORE_METRICS_OP ();
790 glCopyMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level,
791 GLint xoffset, GLint yoffset, GLint x, GLint y,
792 GLsizei width, GLsizei height)
794 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_COPY_TEX_IMAGE);
796 GLWRAP_DEFER (glCopyMultiTexSubImage2DEXT, texunit, target, level,
797 xoffset, yoffset, x, y, width, height);
799 RESTORE_METRICS_OP ();
803 glCopyMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level,
804 GLint xoffset, GLint yoffset, GLint zoffset,
805 GLint x, GLint y, GLsizei width, GLsizei height)
807 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_COPY_TEX_IMAGE);
809 GLWRAP_DEFER (glCopyMultiTexSubImage3DEXT, texunit, target, level,
810 xoffset, yoffset, zoffset, x, y, width, height);
812 RESTORE_METRICS_OP ();
815 /* METRICS_OP_DRAW_PIXELS */
817 glDrawPixels (GLsizei width, GLsizei height, GLenum format, GLenum type,
818 const GLvoid *pixels)
820 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_DRAW_PIXELS);
822 GLWRAP_DEFER (glDrawPixels, width, height, format, type, pixels);
824 RESTORE_METRICS_OP ();
827 /* METRICS_OP_GET_TEX_IMAGE */
830 glGetCompressedMultiTexImageEXT (GLenum texunit, GLenum target,
831 GLint lod, GLvoid *img)
833 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_GET_TEX_IMAGE);
835 GLWRAP_DEFER (glGetCompressedMultiTexImageEXT, texunit,
838 RESTORE_METRICS_OP ();
842 glGetCompressedTexImage (GLenum target, GLint level, GLvoid *img)
844 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_GET_TEX_IMAGE);
846 GLWRAP_DEFER (glGetCompressedTexImage, target, level, img);
848 RESTORE_METRICS_OP ();
852 glGetCompressedTexImageARB (GLenum target, GLint level, GLvoid *img)
854 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_GET_TEX_IMAGE);
856 GLWRAP_DEFER (glGetCompressedTexImageARB, target, level, img);
858 RESTORE_METRICS_OP ();
862 glGetCompressedTextureImageEXT (GLuint texture, GLenum target,
863 GLint lod, GLvoid *img)
865 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_GET_TEX_IMAGE);
867 GLWRAP_DEFER (glGetCompressedTextureImageEXT, texture,
870 RESTORE_METRICS_OP ();
874 glGetMultiTexImageEXT (GLenum texunit, GLenum target, GLint level,
875 GLenum format, GLenum type, GLvoid *pixels)
877 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_GET_TEX_IMAGE);
879 GLWRAP_DEFER (glGetMultiTexImageEXT, texunit,
880 target, level, format, type, pixels);
882 RESTORE_METRICS_OP ();
886 glGetnCompressedTexImageARB (GLenum target, GLint lod,
887 GLsizei bufSize, GLvoid *img)
889 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_GET_TEX_IMAGE);
891 GLWRAP_DEFER (glGetnCompressedTexImageARB, target, lod, bufSize, img);
893 RESTORE_METRICS_OP ();
897 glGetnTexImageARB (GLenum target, GLint level, GLenum format,
898 GLenum type, GLsizei bufSize, GLvoid *img)
900 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_GET_TEX_IMAGE);
902 GLWRAP_DEFER (glGetnTexImageARB, target, level,
903 format, type, bufSize, img);
905 RESTORE_METRICS_OP ();
909 glGetTexImage (GLenum target, GLint level, GLenum format, GLenum type,
912 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_GET_TEX_IMAGE);
914 GLWRAP_DEFER (glGetTexImage, target, level, format, type, pixels);
916 RESTORE_METRICS_OP ();
919 /* METRICS_OP_READ_PIXELS */
921 glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height,
922 GLenum format, GLenum type, GLvoid *pixels )
924 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_READ_PIXELS);
926 GLWRAP_DEFER (glReadPixels, x, y, width, height, format, type, pixels);
928 RESTORE_METRICS_OP ();
932 glReadnPixelsARB (GLint x, GLint y, GLsizei width, GLsizei height,
933 GLenum format, GLenum type, GLsizei bufSize, GLvoid *data)
935 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_READ_PIXELS);
937 GLWRAP_DEFER (glReadnPixelsARB, x, y, width, height,
938 format, type, bufSize, data);
940 RESTORE_METRICS_OP ();
943 /* METRICS_OP_TEX_IMAGE */
945 glTexImage1D (GLenum target, GLint level, GLint internalFormat,
946 GLsizei width, GLint border, GLenum format, GLenum type,
947 const GLvoid *pixels)
949 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
951 GLWRAP_DEFER (glTexImage1D, target, level, internalFormat, width,
952 border, format, type, pixels);
954 RESTORE_METRICS_OP ();
958 glTexImage2D (GLenum target, GLint level, GLint internalFormat,
959 GLsizei width, GLsizei height, GLint border, GLenum format,
960 GLenum type, const GLvoid *pixels )
962 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
964 GLWRAP_DEFER (glTexImage2D, target, level, internalFormat,
965 width, height, border, format, type, pixels);
967 RESTORE_METRICS_OP ();
972 glTexImage2DMultisample (GLenum target, GLsizei samples,
973 GLint internalformat, GLsizei width, GLsizei height,
974 GLboolean fixedsamplelocations)
976 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
978 GLWRAP_DEFER (glTexImage2DMultisample, target, samples,
979 internalformat, width, height, fixedsamplelocations);
981 RESTORE_METRICS_OP ();
985 glTexImage2DMultisampleCoverageNV (GLenum target, GLsizei coverageSamples,
986 GLsizei colorSamples, GLint internalFormat,
987 GLsizei width, GLsizei height,
988 GLboolean fixedSampleLocations)
990 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
992 GLWRAP_DEFER (glTexImage2DMultisampleCoverageNV, target,
993 coverageSamples, colorSamples, internalFormat,
994 width, height, fixedSampleLocations);
996 RESTORE_METRICS_OP ();
1000 glTexImage3D (GLenum target, GLint level, GLint internalformat,
1001 GLsizei width, GLsizei height, GLsizei depth, GLint border,
1002 GLenum format, GLenum type, const GLvoid *pixels)
1004 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1006 GLWRAP_DEFER (glTexImage3D, target, level, internalformat,
1007 width, height, depth, border, format, type, pixels);
1009 RESTORE_METRICS_OP ();
1013 glTexImage3DEXT (GLenum target, GLint level, GLenum internalformat,
1014 GLsizei width, GLsizei height, GLsizei depth, GLint border,
1015 GLenum format, GLenum type, const GLvoid *pixels)
1017 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1019 GLWRAP_DEFER (glTexImage3DEXT, target, level, internalformat,
1020 width, height, depth, border, format, type, pixels);
1022 RESTORE_METRICS_OP ();
1026 glTexImage3DMultisample (GLenum target, GLsizei samples, GLint internalformat,
1027 GLsizei width, GLsizei height, GLsizei depth,
1028 GLboolean fixedsamplelocations)
1030 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1032 GLWRAP_DEFER (glTexImage3DMultisample, target, samples,
1033 internalformat, width, height, depth,
1034 fixedsamplelocations);
1036 RESTORE_METRICS_OP ();
1040 glTexImage3DMultisampleCoverageNV (GLenum target, GLsizei coverageSamples,
1041 GLsizei colorSamples, GLint internalFormat,
1042 GLsizei width, GLsizei height, GLsizei depth,
1043 GLboolean fixedSampleLocations)
1045 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1047 GLWRAP_DEFER (glTexImage3DMultisampleCoverageNV, target,
1048 coverageSamples, colorSamples, internalFormat,
1049 width, height, depth, fixedSampleLocations);
1051 RESTORE_METRICS_OP ();
1055 glTexImage4DSGIS (GLenum target, GLint level, GLenum internalformat,
1056 GLsizei width, GLsizei height, GLsizei depth,
1057 GLsizei size4d, GLint border, GLenum format,
1058 GLenum type, const GLvoid *pixels)
1060 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1062 GLWRAP_DEFER (glTexImage4DSGIS, target, level,
1063 internalformat, width, height, depth,
1064 size4d, border, format, type, pixels);
1066 RESTORE_METRICS_OP ();
1070 glTexSubImage1D (GLenum target, GLint level, GLint xoffset,
1071 GLsizei width, GLenum format, GLenum type,
1072 const GLvoid *pixels)
1074 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1076 GLWRAP_DEFER (glTexSubImage1D, target, level, xoffset,
1077 width, format, type, pixels);
1079 RESTORE_METRICS_OP ();
1083 glTexSubImage1DEXT (GLenum target, GLint level, GLint xoffset,
1084 GLsizei width, GLenum format, GLenum type,
1085 const GLvoid *pixels)
1087 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1089 GLWRAP_DEFER (glTexSubImage1DEXT, target, level, xoffset,
1090 width, format, type, pixels);
1092 RESTORE_METRICS_OP ();
1096 glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset,
1097 GLsizei width, GLsizei height, GLenum format, GLenum type,
1098 const GLvoid *pixels)
1100 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1102 GLWRAP_DEFER (glTexSubImage2D, target, level, xoffset, yoffset,
1103 width, height, format, type, pixels);
1105 RESTORE_METRICS_OP ();
1109 glTexSubImage2DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset,
1110 GLsizei width, GLsizei height, GLenum format, GLenum type,
1111 const GLvoid *pixels)
1113 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1115 GLWRAP_DEFER (glTexSubImage2DEXT, target, level, xoffset, yoffset,
1116 width, height, format, type, pixels);
1118 RESTORE_METRICS_OP ();
1122 glTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset,
1123 GLint zoffset, GLsizei width, GLsizei height, GLsizei depth,
1124 GLenum format, GLenum type, const GLvoid *pixels)
1126 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1128 GLWRAP_DEFER (glTexSubImage3D, target, level, xoffset, yoffset,
1129 zoffset, width, height, depth, format, type, pixels);
1131 RESTORE_METRICS_OP ();
1135 glTexSubImage3DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset,
1136 GLint zoffset, GLsizei width, GLsizei height, GLsizei depth,
1137 GLenum format, GLenum type, const GLvoid *pixels)
1139 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1141 GLWRAP_DEFER (glTexSubImage3DEXT, target, level, xoffset, yoffset,
1142 zoffset, width, height, depth, format, type, pixels);
1144 RESTORE_METRICS_OP ();
1148 glTexSubImage4DSGIS (GLenum target, GLint level, GLint xoffset, GLint yoffset,
1149 GLint zoffset, GLint woffset, GLsizei width,
1150 GLsizei height, GLsizei depth, GLsizei size4d,
1151 GLenum format, GLenum type, const GLvoid *pixels)
1153 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1155 GLWRAP_DEFER (glTexSubImage4DSGIS, target, level, xoffset,
1156 yoffset, zoffset, woffset, width, height,
1157 depth, size4d, format, type, pixels);
1159 RESTORE_METRICS_OP ();
1163 glCompressedMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level,
1164 GLenum internalformat, GLsizei width,
1165 GLint border, GLsizei imageSize,
1168 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1170 GLWRAP_DEFER (glCompressedMultiTexImage1DEXT, texunit, target,
1171 level, internalformat, width, border, imageSize, bits);
1173 RESTORE_METRICS_OP ();
1177 glCompressedMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level,
1178 GLenum internalformat, GLsizei width,
1179 GLsizei height, GLint border,
1180 GLsizei imageSize, const GLvoid *bits)
1182 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1184 GLWRAP_DEFER (glCompressedMultiTexImage2DEXT, texunit, target, level,
1185 internalformat, width, height, border, imageSize, bits);
1187 RESTORE_METRICS_OP ();
1191 glCompressedMultiTexImage3DEXT (GLenum texunit, GLenum target, GLint level,
1192 GLenum internalformat, GLsizei width,
1193 GLsizei height, GLsizei depth, GLint border,
1194 GLsizei imageSize, const GLvoid *bits)
1196 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1198 GLWRAP_DEFER (glCompressedMultiTexImage3DEXT, texunit, target,
1199 level, internalformat, width, height, depth,
1200 border, imageSize, bits);
1202 RESTORE_METRICS_OP ();
1206 glCompressedMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level,
1207 GLint xoffset, GLsizei width, GLenum format,
1208 GLsizei imageSize, const GLvoid *bits)
1210 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1212 GLWRAP_DEFER (glCompressedMultiTexSubImage1DEXT, texunit, target,
1213 level, xoffset, width, format, imageSize, bits);
1215 RESTORE_METRICS_OP ();
1219 glCompressedMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level,
1220 GLint xoffset, GLint yoffset, GLsizei width,
1221 GLsizei height, GLenum format,
1222 GLsizei imageSize, const GLvoid *bits)
1224 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1226 GLWRAP_DEFER (glCompressedMultiTexSubImage2DEXT, texunit, target, level,
1227 xoffset, yoffset, width, height, format, imageSize, bits);
1229 RESTORE_METRICS_OP ();
1233 glCompressedMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level,
1234 GLint xoffset, GLint yoffset, GLint zoffset,
1235 GLsizei width, GLsizei height, GLsizei depth,
1236 GLenum format, GLsizei imageSize,
1239 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1241 GLWRAP_DEFER (glCompressedMultiTexSubImage3DEXT, texunit, target,
1242 level, xoffset, yoffset, zoffset, width, height,
1243 depth, format, imageSize, bits);
1245 RESTORE_METRICS_OP ();
1249 glCompressedTexImage1D (GLenum target, GLint level, GLenum internalformat,
1250 GLsizei width, GLint border, GLsizei imageSize,
1253 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1255 GLWRAP_DEFER (glCompressedTexImage1D, target, level,
1256 internalformat, width, border, imageSize, data);
1258 RESTORE_METRICS_OP ();
1262 glCompressedTexImage1DARB (GLenum target, GLint level, GLenum internalformat,
1263 GLsizei width, GLint border, GLsizei imageSize,
1266 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1268 GLWRAP_DEFER (glCompressedTexImage1DARB, target, level, internalformat,
1269 width, border, imageSize, data);
1271 RESTORE_METRICS_OP ();
1275 glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat,
1276 GLsizei width, GLsizei height, GLint border,
1277 GLsizei imageSize, const GLvoid *data)
1279 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1281 GLWRAP_DEFER (glCompressedTexImage2D, target, level, internalformat,
1282 width, height, border, imageSize, data);
1284 RESTORE_METRICS_OP ();
1288 glCompressedTexImage2DARB (GLenum target, GLint level, GLenum internalformat,
1289 GLsizei width, GLsizei height, GLint border,
1290 GLsizei imageSize, const GLvoid *data)
1292 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1294 GLWRAP_DEFER (glCompressedTexImage2DARB, target, level, internalformat,
1295 width, height, border, imageSize, data);
1297 RESTORE_METRICS_OP ();
1301 glCompressedTexImage3D (GLenum target, GLint level, GLenum internalformat,
1302 GLsizei width, GLsizei height, GLsizei depth,
1303 GLint border, GLsizei imageSize, const GLvoid *data)
1305 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1307 GLWRAP_DEFER (glCompressedTexImage3D, target, level, internalformat,
1308 width, height, depth, border, imageSize, data);
1310 RESTORE_METRICS_OP ();
1314 glCompressedTexImage3DARB (GLenum target, GLint level, GLenum internalformat,
1315 GLsizei width, GLsizei height, GLsizei depth,
1316 GLint border, GLsizei imageSize, const GLvoid *data)
1318 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1320 GLWRAP_DEFER (glCompressedTexImage3DARB, target, level, internalformat,
1321 width, height, depth, border, imageSize, data);
1323 RESTORE_METRICS_OP ();
1327 glCompressedTexSubImage1D (GLenum target, GLint level, GLint xoffset,
1328 GLsizei width, GLenum format, GLsizei imageSize,
1331 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1333 GLWRAP_DEFER (glCompressedTexSubImage1D, target, level, xoffset,
1334 width, format, imageSize, data);
1336 RESTORE_METRICS_OP ();
1340 glCompressedTexSubImage1DARB (GLenum target, GLint level, GLint xoffset,
1341 GLsizei width, GLenum format, GLsizei imageSize,
1344 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1346 GLWRAP_DEFER (glCompressedTexSubImage1DARB, target, level, xoffset,
1347 width, format, imageSize, data);
1349 RESTORE_METRICS_OP ();
1353 glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset,
1354 GLint yoffset, GLsizei width, GLsizei height,
1355 GLenum format, GLsizei imageSize, const GLvoid *data)
1357 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1359 GLWRAP_DEFER (glCompressedTexSubImage2D, target, level, xoffset,
1360 yoffset, width, height, format, imageSize, data);
1362 RESTORE_METRICS_OP ();
1366 glCompressedTexSubImage2DARB (GLenum target, GLint level, GLint xoffset,
1367 GLint yoffset, GLsizei width, GLsizei height,
1368 GLenum format, GLsizei imageSize,
1371 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1373 GLWRAP_DEFER (glCompressedTexSubImage2DARB, target, level, xoffset,
1374 yoffset, width, height, format, imageSize, data);
1376 RESTORE_METRICS_OP ();
1380 glCompressedTexSubImage3D (GLenum target, GLint level, GLint xoffset,
1381 GLint yoffset, GLint zoffset, GLsizei width,
1382 GLsizei height, GLsizei depth, GLenum format,
1383 GLsizei imageSize, const GLvoid *data)
1385 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1387 GLWRAP_DEFER (glCompressedTexSubImage3D, target, level, xoffset,
1388 yoffset, zoffset, width, height, depth, format,
1391 RESTORE_METRICS_OP ();
1395 glCompressedTexSubImage3DARB (GLenum target, GLint level, GLint xoffset,
1396 GLint yoffset, GLint zoffset, GLsizei width,
1397 GLsizei height, GLsizei depth, GLenum format,
1398 GLsizei imageSize, const GLvoid *data)
1400 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1402 GLWRAP_DEFER (glCompressedTexSubImage3DARB, target, level, xoffset,
1403 yoffset, zoffset, width, height, depth, format,
1406 RESTORE_METRICS_OP ();
1410 glCompressedTextureImage1DEXT (GLuint texture, GLenum target, GLint level,
1411 GLenum internalformat, GLsizei width,
1412 GLint border, GLsizei imageSize,
1415 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1417 GLWRAP_DEFER (glCompressedTextureImage1DEXT, texture, target, level,
1418 internalformat, width, border, imageSize, bits);
1420 RESTORE_METRICS_OP ();
1424 glCompressedTextureImage2DEXT (GLuint texture, GLenum target, GLint level,
1425 GLenum internalformat, GLsizei width,
1426 GLsizei height, GLint border,
1427 GLsizei imageSize, const GLvoid *bits)
1429 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1431 GLWRAP_DEFER (glCompressedTextureImage2DEXT, texture, target, level,
1432 internalformat, width, height, border, imageSize, bits);
1434 RESTORE_METRICS_OP ();
1438 glCompressedTextureImage3DEXT (GLuint texture, GLenum target, GLint level,
1439 GLenum internalformat, GLsizei width,
1440 GLsizei height, GLsizei depth, GLint border,
1441 GLsizei imageSize, const GLvoid *bits)
1443 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1445 GLWRAP_DEFER (glCompressedTextureImage3DEXT, texture, target,
1446 level, internalformat, width, height, depth,
1447 border, imageSize, bits);
1449 RESTORE_METRICS_OP ();
1453 glCompressedTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level,
1454 GLint xoffset, GLsizei width, GLenum format,
1455 GLsizei imageSize, const GLvoid *bits)
1457 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1459 GLWRAP_DEFER (glCompressedTextureSubImage1DEXT, texture, target,
1460 level, xoffset, width, format, imageSize, bits);
1462 RESTORE_METRICS_OP ();
1466 glCompressedTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level,
1467 GLint xoffset, GLint yoffset, GLsizei width,
1468 GLsizei height, GLenum format,
1469 GLsizei imageSize, const GLvoid *bits)
1471 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1473 GLWRAP_DEFER (glCompressedTextureSubImage2DEXT, texture, target, level,
1474 xoffset, yoffset, width, height, format, imageSize, bits);
1476 RESTORE_METRICS_OP ();
1480 glCompressedTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level,
1481 GLint xoffset, GLint yoffset, GLint zoffset,
1482 GLsizei width, GLsizei height, GLsizei depth,
1483 GLenum format, GLsizei imageSize,
1486 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1488 GLWRAP_DEFER (glCompressedTextureSubImage3DEXT, texture, target,
1489 level, xoffset, yoffset, zoffset, width, height,
1490 depth, format, imageSize, bits);
1492 RESTORE_METRICS_OP ();
1496 glMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level,
1497 GLenum internalformat, GLsizei width, GLint border,
1498 GLenum format, GLenum type, const GLvoid *pixels)
1500 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1502 GLWRAP_DEFER (glMultiTexImage1DEXT, texunit, target, level,
1503 internalformat, width, border, format, type, pixels);
1505 RESTORE_METRICS_OP ();
1509 glMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level,
1510 GLenum internalformat, GLsizei width, GLsizei height,
1511 GLint border, GLenum format, GLenum type,
1512 const GLvoid *pixels)
1514 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1516 GLWRAP_DEFER (glMultiTexImage2DEXT, texunit, target, level,
1517 internalformat, width, height, border, format,
1520 RESTORE_METRICS_OP ();
1524 glMultiTexImage3DEXT (GLenum texunit, GLenum target, GLint level,
1525 GLenum internalformat, GLsizei width, GLsizei height,
1526 GLsizei depth, GLint border, GLenum format,
1527 GLenum type, const GLvoid *pixels)
1529 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1531 GLWRAP_DEFER (glMultiTexImage3DEXT, texunit, target, level,
1532 internalformat, width, height, depth, border,
1533 format, type, pixels);
1535 RESTORE_METRICS_OP ();
1539 glMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level,
1540 GLint xoffset, GLsizei width, GLenum format,
1541 GLenum type, const GLvoid *pixels)
1543 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1545 GLWRAP_DEFER (glMultiTexSubImage1DEXT, texunit, target, level,
1546 xoffset, width, format, type, pixels);
1548 RESTORE_METRICS_OP ();
1552 glMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level,
1553 GLint xoffset, GLint yoffset, GLsizei width,
1554 GLsizei height, GLenum format, GLenum type,
1555 const GLvoid *pixels)
1557 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1559 GLWRAP_DEFER (glMultiTexSubImage2DEXT, texunit, target, level, xoffset,
1560 yoffset, width, height, format, type, pixels);
1562 RESTORE_METRICS_OP ();
1566 glMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level,
1567 GLint xoffset, GLint yoffset, GLint zoffset,
1568 GLsizei width, GLsizei height, GLsizei depth,
1569 GLenum format, GLenum type, const GLvoid *pixels)
1571 SAVE_THEN_SWITCH_METRICS_OP (METRICS_OP_TEX_IMAGE);
1573 GLWRAP_DEFER (glMultiTexSubImage3DEXT, texunit, target, level,
1574 xoffset, yoffset, zoffset, width, height, depth,
1575 format, type, pixels);
1577 RESTORE_METRICS_OP ();