summaryrefslogtreecommitdiffstats
path: root/opengl_func.h
diff options
context:
space:
mode:
Diffstat (limited to 'opengl_func.h')
-rw-r--r--opengl_func.h915
1 files changed, 915 insertions, 0 deletions
diff --git a/opengl_func.h b/opengl_func.h
new file mode 100644
index 0000000..2a7d7c0
--- /dev/null
+++ b/opengl_func.h
@@ -0,0 +1,915 @@
+/*
+ * Main header for both host and guest sides
+ *
+ * Copyright (c) 2006,2007 Even Rouault
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#include "mesa_gl.h"
+#include "mesa_glext.h"
+
+enum
+{
+ TYPE_NONE,
+ TYPE_CHAR,
+ TYPE_UNSIGNED_CHAR,
+ TYPE_SHORT,
+ TYPE_UNSIGNED_SHORT,
+ TYPE_INT,
+ TYPE_UNSIGNED_INT,
+ TYPE_FLOAT,
+ TYPE_DOUBLE,
+ TYPE_1CHAR,
+ TYPE_2CHAR,
+ TYPE_3CHAR,
+ TYPE_4CHAR,
+ TYPE_128UCHAR,
+ TYPE_1SHORT,
+ TYPE_2SHORT,
+ TYPE_3SHORT,
+ TYPE_4SHORT,
+ TYPE_1INT,
+ TYPE_2INT,
+ TYPE_3INT,
+ TYPE_4INT,
+ TYPE_1FLOAT,
+ TYPE_2FLOAT,
+ TYPE_3FLOAT,
+ TYPE_4FLOAT,
+ TYPE_16FLOAT,
+ TYPE_1DOUBLE,
+ TYPE_2DOUBLE,
+ TYPE_3DOUBLE,
+ TYPE_4DOUBLE,
+ TYPE_16DOUBLE,
+ TYPE_OUT_1INT,
+ TYPE_OUT_1FLOAT,
+ TYPE_OUT_4CHAR,
+ TYPE_OUT_4INT,
+ TYPE_OUT_4FLOAT,
+ TYPE_OUT_4DOUBLE,
+ TYPE_OUT_128UCHAR,
+ TYPE_CONST_CHAR,
+ TYPE_ARRAY_CHAR,
+ TYPE_ARRAY_SHORT,
+ TYPE_ARRAY_INT,
+ TYPE_ARRAY_FLOAT,
+ TYPE_ARRAY_DOUBLE,
+ TYPE_IN_IGNORED_POINTER,
+ TYPE_OUT_ARRAY_CHAR,
+ TYPE_OUT_ARRAY_SHORT,
+ TYPE_OUT_ARRAY_INT,
+ TYPE_OUT_ARRAY_FLOAT,
+ TYPE_OUT_ARRAY_DOUBLE,
+ TYPE_NULL_TERMINATED_STRING,
+
+ TYPE_ARRAY_CHAR_OF_LENGTH_DEPENDING_ON_PREVIOUS_ARGS,
+ TYPE_ARRAY_SHORT_OF_LENGTH_DEPENDING_ON_PREVIOUS_ARGS,
+ TYPE_ARRAY_INT_OF_LENGTH_DEPENDING_ON_PREVIOUS_ARGS,
+ TYPE_ARRAY_FLOAT_OF_LENGTH_DEPENDING_ON_PREVIOUS_ARGS,
+ TYPE_ARRAY_DOUBLE_OF_LENGTH_DEPENDING_ON_PREVIOUS_ARGS,
+ TYPE_OUT_ARRAY_CHAR_OF_LENGTH_DEPENDING_ON_PREVIOUS_ARGS,
+ TYPE_OUT_ARRAY_SHORT_OF_LENGTH_DEPENDING_ON_PREVIOUS_ARGS,
+ TYPE_OUT_ARRAY_INT_OF_LENGTH_DEPENDING_ON_PREVIOUS_ARGS,
+ TYPE_OUT_ARRAY_FLOAT_OF_LENGTH_DEPENDING_ON_PREVIOUS_ARGS,
+ TYPE_OUT_ARRAY_DOUBLE_OF_LENGTH_DEPENDING_ON_PREVIOUS_ARGS,
+ /* .... */
+ TYPE_LAST,
+ /* .... */
+ TYPE_1UCHAR = TYPE_CHAR,
+ TYPE_1USHORT = TYPE_1SHORT,
+ TYPE_1UINT = TYPE_1INT,
+ TYPE_OUT_1UINT = TYPE_OUT_1INT,
+ TYPE_OUT_4UCHAR = TYPE_OUT_4CHAR,
+ TYPE_ARRAY_VOID = TYPE_ARRAY_CHAR,
+ TYPE_ARRAY_SIGNED_CHAR = TYPE_ARRAY_CHAR,
+ TYPE_ARRAY_UNSIGNED_CHAR = TYPE_ARRAY_CHAR,
+ TYPE_ARRAY_UNSIGNED_SHORT = TYPE_ARRAY_SHORT,
+ TYPE_ARRAY_UNSIGNED_INT = TYPE_ARRAY_INT,
+ TYPE_OUT_ARRAY_VOID = TYPE_OUT_ARRAY_CHAR,
+ TYPE_OUT_ARRAY_SIGNED_CHAR = TYPE_OUT_ARRAY_CHAR,
+ TYPE_OUT_ARRAY_UNSIGNED_CHAR = TYPE_OUT_ARRAY_CHAR,
+ TYPE_OUT_ARRAY_UNSIGNED_SHORT = TYPE_OUT_ARRAY_SHORT,
+ TYPE_OUT_ARRAY_UNSIGNED_INT = TYPE_OUT_ARRAY_INT,
+ TYPE_ARRAY_VOID_OF_LENGTH_DEPENDING_ON_PREVIOUS_ARGS = TYPE_ARRAY_CHAR_OF_LENGTH_DEPENDING_ON_PREVIOUS_ARGS,
+ TYPE_ARRAY_SIGNED_CHAR_OF_LENGTH_DEPENDING_ON_PREVIOUS_ARGS = TYPE_ARRAY_CHAR_OF_LENGTH_DEPENDING_ON_PREVIOUS_ARGS,
+ TYPE_ARRAY_UNSIGNED_CHAR_OF_LENGTH_DEPENDING_ON_PREVIOUS_ARGS = TYPE_ARRAY_CHAR_OF_LENGTH_DEPENDING_ON_PREVIOUS_ARGS,
+ TYPE_ARRAY_UNSIGNED_SHORT_OF_LENGTH_DEPENDING_ON_PREVIOUS_ARGS = TYPE_ARRAY_SHORT_OF_LENGTH_DEPENDING_ON_PREVIOUS_ARGS,
+ TYPE_ARRAY_UNSIGNED_INT_OF_LENGTH_DEPENDING_ON_PREVIOUS_ARGS = TYPE_ARRAY_INT_OF_LENGTH_DEPENDING_ON_PREVIOUS_ARGS,
+ TYPE_OUT_ARRAY_VOID_OF_LENGTH_DEPENDING_ON_PREVIOUS_ARGS = TYPE_OUT_ARRAY_CHAR_OF_LENGTH_DEPENDING_ON_PREVIOUS_ARGS,
+ TYPE_OUT_ARRAY_SIGNED_CHAR_OF_LENGTH_DEPENDING_ON_PREVIOUS_ARGS = TYPE_OUT_ARRAY_CHAR_OF_LENGTH_DEPENDING_ON_PREVIOUS_ARGS,
+ TYPE_OUT_ARRAY_UNSIGNED_CHAR_OF_LENGTH_DEPENDING_ON_PREVIOUS_ARGS = TYPE_OUT_ARRAY_CHAR_OF_LENGTH_DEPENDING_ON_PREVIOUS_ARGS,
+ TYPE_OUT_ARRAY_UNSIGNED_SHORT_OF_LENGTH_DEPENDING_ON_PREVIOUS_ARGS = TYPE_OUT_ARRAY_SHORT_OF_LENGTH_DEPENDING_ON_PREVIOUS_ARGS,
+ TYPE_OUT_ARRAY_UNSIGNED_INT_OF_LENGTH_DEPENDING_ON_PREVIOUS_ARGS = TYPE_OUT_ARRAY_INT_OF_LENGTH_DEPENDING_ON_PREVIOUS_ARGS,
+};
+
+#define CASE_IN_LENGTH_DEPENDING_ON_PREVIOUS_ARGS \
+ case TYPE_ARRAY_CHAR_OF_LENGTH_DEPENDING_ON_PREVIOUS_ARGS: \
+ case TYPE_ARRAY_SHORT_OF_LENGTH_DEPENDING_ON_PREVIOUS_ARGS: \
+ case TYPE_ARRAY_INT_OF_LENGTH_DEPENDING_ON_PREVIOUS_ARGS: \
+ case TYPE_ARRAY_FLOAT_OF_LENGTH_DEPENDING_ON_PREVIOUS_ARGS: \
+ case TYPE_ARRAY_DOUBLE_OF_LENGTH_DEPENDING_ON_PREVIOUS_ARGS
+
+#define CASE_OUT_LENGTH_DEPENDING_ON_PREVIOUS_ARGS \
+ case TYPE_OUT_ARRAY_CHAR_OF_LENGTH_DEPENDING_ON_PREVIOUS_ARGS: \
+ case TYPE_OUT_ARRAY_SHORT_OF_LENGTH_DEPENDING_ON_PREVIOUS_ARGS: \
+ case TYPE_OUT_ARRAY_INT_OF_LENGTH_DEPENDING_ON_PREVIOUS_ARGS: \
+ case TYPE_OUT_ARRAY_FLOAT_OF_LENGTH_DEPENDING_ON_PREVIOUS_ARGS: \
+ case TYPE_OUT_ARRAY_DOUBLE_OF_LENGTH_DEPENDING_ON_PREVIOUS_ARGS
+
+#define CASE_IN_UNKNOWN_SIZE_POINTERS \
+ case TYPE_ARRAY_CHAR: \
+ case TYPE_ARRAY_SHORT: \
+ case TYPE_ARRAY_INT: \
+ case TYPE_ARRAY_FLOAT: \
+ case TYPE_ARRAY_DOUBLE
+
+#define CASE_IN_KNOWN_SIZE_POINTERS \
+ case TYPE_1CHAR:\
+ case TYPE_2CHAR:\
+ case TYPE_3CHAR:\
+ case TYPE_4CHAR:\
+ case TYPE_128UCHAR:\
+ case TYPE_1SHORT:\
+ case TYPE_2SHORT:\
+ case TYPE_3SHORT:\
+ case TYPE_4SHORT:\
+ case TYPE_1INT:\
+ case TYPE_2INT:\
+ case TYPE_3INT:\
+ case TYPE_4INT:\
+ case TYPE_1FLOAT:\
+ case TYPE_2FLOAT:\
+ case TYPE_3FLOAT:\
+ case TYPE_4FLOAT:\
+ case TYPE_16FLOAT:\
+ case TYPE_1DOUBLE:\
+ case TYPE_2DOUBLE:\
+ case TYPE_3DOUBLE:\
+ case TYPE_4DOUBLE:\
+ case TYPE_16DOUBLE
+
+#define CASE_OUT_UNKNOWN_SIZE_POINTERS \
+ case TYPE_OUT_ARRAY_CHAR: \
+ case TYPE_OUT_ARRAY_SHORT: \
+ case TYPE_OUT_ARRAY_INT: \
+ case TYPE_OUT_ARRAY_FLOAT: \
+ case TYPE_OUT_ARRAY_DOUBLE
+
+#define CASE_OUT_KNOWN_SIZE_POINTERS \
+ case TYPE_OUT_1INT: \
+ case TYPE_OUT_1FLOAT: \
+ case TYPE_OUT_4CHAR: \
+ case TYPE_OUT_4INT: \
+ case TYPE_OUT_4FLOAT: \
+ case TYPE_OUT_4DOUBLE: \
+ case TYPE_OUT_128UCHAR \
+
+#define CASE_IN_POINTERS CASE_IN_UNKNOWN_SIZE_POINTERS: CASE_IN_KNOWN_SIZE_POINTERS: CASE_IN_LENGTH_DEPENDING_ON_PREVIOUS_ARGS
+#define CASE_OUT_POINTERS CASE_OUT_UNKNOWN_SIZE_POINTERS: CASE_OUT_KNOWN_SIZE_POINTERS: CASE_OUT_LENGTH_DEPENDING_ON_PREVIOUS_ARGS
+
+#define CASE_POINTERS CASE_IN_POINTERS: CASE_OUT_POINTERS
+#define CASE_KNOWN_SIZE_POINTERS CASE_IN_KNOWN_SIZE_POINTERS: CASE_OUT_KNOWN_SIZE_POINTERS
+
+
+#define IS_ARRAY_CHAR(type) (type == TYPE_ARRAY_CHAR || type == TYPE_1CHAR || type == TYPE_2CHAR || type == TYPE_3CHAR || type == TYPE_4CHAR || type == TYPE_ARRAY_CHAR_OF_LENGTH_DEPENDING_ON_PREVIOUS_ARGS)
+#define IS_ARRAY_SHORT(type) (type == TYPE_ARRAY_SHORT || type == TYPE_1SHORT || type == TYPE_2SHORT || type == TYPE_3SHORT || type == TYPE_4SHORT || type == TYPE_ARRAY_SHORT_OF_LENGTH_DEPENDING_ON_PREVIOUS_ARGS)
+#define IS_ARRAY_INT(type) (type == TYPE_ARRAY_INT || type == TYPE_1INT || type == TYPE_2INT || type == TYPE_3INT || type == TYPE_4INT || type == TYPE_ARRAY_INT_OF_LENGTH_DEPENDING_ON_PREVIOUS_ARGS)
+#define IS_ARRAY_FLOAT(type) (type == TYPE_ARRAY_FLOAT || type == TYPE_1FLOAT || type == TYPE_2FLOAT || type == TYPE_3FLOAT || type == TYPE_4FLOAT || type == TYPE_16FLOAT || type == TYPE_ARRAY_FLOAT_OF_LENGTH_DEPENDING_ON_PREVIOUS_ARGS)
+#define IS_ARRAY_DOUBLE(type) (type == TYPE_ARRAY_DOUBLE || type == TYPE_1DOUBLE || type == TYPE_2DOUBLE || type == TYPE_3DOUBLE || type == TYPE_4DOUBLE || type == TYPE_16DOUBLE || type == TYPE_ARRAY_DOUBLE_OF_LENGTH_DEPENDING_ON_PREVIOUS_ARGS)
+
+#define NB_MAX_TEXTURES 16
+#define MY_GL_MAX_VERTEX_ATTRIBS_ARB 16
+#define MY_GL_MAX_VERTEX_ATTRIBS_NV 16
+#define MY_GL_MAX_VARIANT_POINTER_EXT 16
+
+static int tab_args_type_length[] =
+{
+ 0,
+ sizeof(char),
+ sizeof(unsigned char),
+ sizeof(short),
+ sizeof(unsigned short),
+ sizeof(int),
+ sizeof(unsigned int),
+ sizeof(float),
+ sizeof(double),
+ 1 * sizeof(char),
+ 2 * sizeof(char),
+ 3 * sizeof(char),
+ 4 * sizeof(char),
+ 128 * sizeof(char),
+ 1 * sizeof(short),
+ 2 * sizeof(short),
+ 3 * sizeof(short),
+ 4 * sizeof(short),
+ 1 * sizeof(int),
+ 2 * sizeof(int),
+ 3 * sizeof(int),
+ 4 * sizeof(int),
+ 1 * sizeof(float),
+ 2 * sizeof(float),
+ 3 * sizeof(float),
+ 4 * sizeof(float),
+ 16 * sizeof(float),
+ 1 * sizeof(double),
+ 2 * sizeof(double),
+ 3 * sizeof(double),
+ 4 * sizeof(double),
+ 16 * sizeof(double),
+ sizeof(int),
+ sizeof(float),
+ 4 * sizeof(char),
+ 4 * sizeof(int),
+ 4 * sizeof(float),
+ 4 * sizeof(double),
+ 128 * sizeof(char),
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+
+ /* the following sizes are the size of 1 element of the array */
+ sizeof(char),
+ sizeof(short),
+ sizeof(int),
+ sizeof(float),
+ sizeof(double),
+ sizeof(char),
+ sizeof(short),
+ sizeof(int),
+ sizeof(float),
+ sizeof(double),
+};
+
+typedef struct
+{
+ int ret_type;
+ int has_out_parameters;
+ int nb_args;
+ int args_type[0];
+} Signature;
+
+static const int _init32_signature[] =
+ { TYPE_NONE, 1, 2, TYPE_INT, TYPE_OUT_1INT};
+static const int _init64_signature[] =
+ { TYPE_NONE, 1, 2, TYPE_INT, TYPE_OUT_1INT};
+
+static const int _synchronize_signature[] = { TYPE_INT, 0, 0 };
+
+static const int _serialized_calls_signature[] = { TYPE_NONE, 0, 1, TYPE_ARRAY_CHAR };
+
+static const int _exit_process_signature[] = {TYPE_NONE, 0, 0};
+
+static const int _changeWindowState_signature[] = {TYPE_NONE, 0, 2, TYPE_INT, TYPE_INT};
+
+static const int _moveResizeWindow_signature[] = {TYPE_NONE, 0, 2, TYPE_INT, TYPE_4INT};
+
+static const int _send_cursor_signature[] = {TYPE_NONE, 0, 7, TYPE_INT, TYPE_INT,
+ TYPE_INT, TYPE_INT,
+ TYPE_INT, TYPE_INT,
+ TYPE_ARRAY_INT };
+
+/* XVisualInfo* glXChooseVisual( Display *dpy, int screen, int *attribList ) */
+static const int glXChooseVisual_signature[] = {TYPE_INT, 0, 3, TYPE_IN_IGNORED_POINTER, TYPE_INT, TYPE_ARRAY_INT };
+
+/*GLXContext glXCreateContext( Display *dpy, XVisualInfo *vis,
+ GLXContext shareList, Bool direct )*/
+static const int glXCreateContext_signature[] = {TYPE_INT, 0, 4, TYPE_IN_IGNORED_POINTER, TYPE_INT, TYPE_INT, TYPE_INT};
+
+static const int glXCopyContext_signature[] = {TYPE_NONE, 0, 4, TYPE_IN_IGNORED_POINTER, TYPE_INT, TYPE_INT, TYPE_INT};
+
+/* void glXDestroyContext( Display *dpy, GLXContext ctx ) */
+static const int glXDestroyContext_signature[] = {TYPE_NONE, 0, 2, TYPE_IN_IGNORED_POINTER, TYPE_INT};
+
+/* Bool glXMakeCurrent( Display *dpy, GLXDrawable drawable, GLXContext ctx) */
+//static const int glXMakeCurrent_signature[] = {TYPE_INT, 0, 3, TYPE_IN_IGNORED_POINTER, TYPE_INT, TYPE_INT};
+/* making it asynchronous */
+static const int glXMakeCurrent_signature[] = {TYPE_NONE, 0, 3, TYPE_IN_IGNORED_POINTER, TYPE_INT, TYPE_INT};
+
+/*int glXGetConfig( Display *dpy, XVisualInfo *visual,
+ int attrib, int *value )*/
+static const int glXGetConfig_signature[] = {TYPE_INT, 1, 4, TYPE_IN_IGNORED_POINTER, TYPE_INT, TYPE_INT, TYPE_OUT_1INT};
+
+/* "glXGetConfig_extended"(dpy, visual_id, int n, int* attribs, int* values, int* rets) */
+static const int glXGetConfig_extended_signature[] = {TYPE_NONE, 1, 6, TYPE_IN_IGNORED_POINTER, TYPE_INT, TYPE_INT, TYPE_ARRAY_INT, TYPE_OUT_ARRAY_INT, TYPE_OUT_ARRAY_INT};
+
+/* void glXSwapBuffers( Display *dpy, GLXDrawable drawable ); */
+static const int glXSwapBuffers_signature[] = {TYPE_NONE, 0, 2, TYPE_IN_IGNORED_POINTER, TYPE_INT};
+
+/* Bool glXQueryVersion( Display *dpy, int *maj, int *min ) */
+static const int glXQueryVersion_signature[] = {TYPE_INT, 1, 3, TYPE_IN_IGNORED_POINTER, TYPE_OUT_1INT, TYPE_OUT_1INT};
+
+/* Bool glXQueryExtension( Display *dpy, int *errorBase, int *eventBase ) */
+static const int glXQueryExtension_signature[] = {TYPE_INT, 1, 3, TYPE_IN_IGNORED_POINTER, TYPE_OUT_1INT, TYPE_OUT_1INT};
+
+static const int glXWaitGL_signature[] = { TYPE_INT, 0, 0 };
+static const int glXWaitX_signature[] = { TYPE_INT, 0, 0 };
+
+/* GLX 1.1 and later */
+
+/* const char *glXGetClientString( Display *dpy, int name ) */
+static const int glXGetClientString_signature[] = {TYPE_CONST_CHAR, 0, 2, TYPE_IN_IGNORED_POINTER, TYPE_INT};
+
+/*const char *glXQueryExtensionsString( Display *dpy, int screen ) */
+static const int glXQueryExtensionsString_signature[] = {TYPE_CONST_CHAR, 0, 2, TYPE_IN_IGNORED_POINTER, TYPE_INT};
+
+/* const char *glXQueryServerString( Display *dpy, int screen, int name ) */
+static const int glXQueryServerString_signature[] = {TYPE_CONST_CHAR, 0, 3, TYPE_IN_IGNORED_POINTER, TYPE_INT, TYPE_INT};
+
+
+static const int glXGetProcAddress_fake_signature[] = {TYPE_INT, 0, 1, TYPE_NULL_TERMINATED_STRING};
+
+static const int glXGetProcAddress_global_fake_signature[] = {TYPE_NONE, 1, 3, TYPE_INT, TYPE_ARRAY_CHAR, TYPE_OUT_ARRAY_CHAR};
+
+
+/* GLX 1.3 and later */
+
+/*
+GLXFBConfig *glXChooseFBConfig( Display *dpy, int screen,
+ const int *attribList, int *nitems ); */
+static const int glXChooseFBConfig_signature[] = {TYPE_INT, 1, 4, TYPE_IN_IGNORED_POINTER, TYPE_INT, TYPE_ARRAY_INT, TYPE_OUT_1INT};
+
+static const int glXChooseFBConfigSGIX_signature[] = {TYPE_INT, 1, 4, TYPE_IN_IGNORED_POINTER, TYPE_INT, TYPE_ARRAY_INT, TYPE_OUT_1INT};
+
+static const int glXGetFBConfigs_signature[] = {TYPE_INT, 1, 3, TYPE_IN_IGNORED_POINTER, TYPE_INT, TYPE_OUT_1INT};
+
+/* "glXGetFBConfigAttrib_extended"(dpy, fbconfig, int n, int* attribs, int* values, int* rets) */
+static const int glXGetFBConfigAttrib_extended_signature[] = {TYPE_NONE, 1, 6, TYPE_IN_IGNORED_POINTER, TYPE_INT, TYPE_INT, TYPE_ARRAY_INT, TYPE_OUT_ARRAY_INT, TYPE_OUT_ARRAY_INT};
+
+
+/* GLXPbuffer glXCreatePbuffer( Display *dpy, GLXFBConfig config,
+ const int *attribList ) */
+static const int glXCreatePbuffer_signature[] = {TYPE_INT, 0, 3, TYPE_IN_IGNORED_POINTER, TYPE_INT, TYPE_ARRAY_INT};
+
+static const int glXCreateGLXPbufferSGIX_signature[] = {TYPE_INT, 0, 5, TYPE_IN_IGNORED_POINTER, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_ARRAY_INT};
+
+static const int glXDestroyPbuffer_signature[] = {TYPE_NONE, 0, 2, TYPE_IN_IGNORED_POINTER, TYPE_INT};
+
+static const int glXDestroyGLXPbufferSGIX_signature[] = {TYPE_NONE, 0, 2, TYPE_IN_IGNORED_POINTER, TYPE_INT};
+
+/* GLXContext glXCreateNewContext(Display * dpy
+ GLXFBConfig config
+ int renderType
+ GLXContext ShareList
+ Bool Direct) */
+static const int glXCreateNewContext_signature[] = {TYPE_INT, 0, 5, TYPE_IN_IGNORED_POINTER, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT};
+
+static const int glXCreateContextWithConfigSGIX_signature[] = {TYPE_INT, 0, 5, TYPE_IN_IGNORED_POINTER, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT};
+
+/*XVisualInfo *glXGetVisualFromFBConfig( Display *dpy, GLXFBConfig config ) */
+static const int glXGetVisualFromFBConfig_signature[] = {TYPE_INT, 0, 2, TYPE_IN_IGNORED_POINTER, TYPE_INT};
+
+/*int glXGetFBConfigAttrib(Display *dpy, GLXFBConfig config, int attribute, int *value)*/
+static const int glXGetFBConfigAttrib_signature[] = {TYPE_INT, 1, 4, TYPE_IN_IGNORED_POINTER, TYPE_INT, TYPE_INT, TYPE_OUT_1INT};
+
+static const int glXGetFBConfigAttribSGIX_signature[] = {TYPE_INT, 1, 4, TYPE_IN_IGNORED_POINTER, TYPE_INT, TYPE_INT, TYPE_OUT_1INT};
+
+static const int glXQueryContext_signature[] = {TYPE_INT, 1, 4, TYPE_IN_IGNORED_POINTER, TYPE_INT, TYPE_INT, TYPE_OUT_1INT};
+
+static const int glXQueryGLXPbufferSGIX_signature[] = {TYPE_INT, 1, 4, TYPE_IN_IGNORED_POINTER, TYPE_INT, TYPE_INT, TYPE_OUT_1INT};
+
+static const int glXQueryDrawable_signature[] = {TYPE_NONE, 1, 4, TYPE_IN_IGNORED_POINTER, TYPE_INT, TYPE_INT, TYPE_OUT_1INT};
+
+/* void glXUseXFont( Font font, int first, int count, int list ) */
+static const int glXUseXFont_signature[] = {TYPE_NONE, 0, 4, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT};
+
+/* Bool glXIsDirect( Display *dpy, GLXContext ctx ) */
+static const int glXIsDirect_signature[] = {TYPE_CHAR, 0, 2, TYPE_IN_IGNORED_POINTER, TYPE_INT };
+
+static const int glXGetScreenDriver_signature[] = { TYPE_CONST_CHAR, 0, 2, TYPE_IN_IGNORED_POINTER, TYPE_INT };
+
+static const int glXGetDriverConfig_signature[] = { TYPE_CONST_CHAR, 0, 1, TYPE_NULL_TERMINATED_STRING };
+
+
+static const int glXWaitVideoSyncSGI_signature[] = { TYPE_INT, 1, 3, TYPE_INT, TYPE_INT, TYPE_OUT_1INT };
+
+static const int glXGetVideoSyncSGI_signature[] = { TYPE_INT, 1, 1, TYPE_OUT_1INT };
+
+static const int glXSwapIntervalSGI_signature[] = { TYPE_INT, 0, 1, TYPE_INT };
+
+static const int glXBindTexImageATI_signature[] = { TYPE_NONE, 0, 3, TYPE_IN_IGNORED_POINTER, TYPE_INT, TYPE_INT };
+static const int glXReleaseTexImageATI_signature[] = { TYPE_NONE, 0, 3, TYPE_IN_IGNORED_POINTER, TYPE_INT, TYPE_INT };
+static const int glXBindTexImageARB_signature[] = { TYPE_INT, 0, 3, TYPE_IN_IGNORED_POINTER, TYPE_INT, TYPE_INT };
+static const int glXReleaseTexImageARB_signature[] = { TYPE_INT, 0, 3, TYPE_IN_IGNORED_POINTER, TYPE_INT, TYPE_INT };
+
+/* const GLubyte * glGetString( GLenum name ) */
+static const int glGetString_signature[] = {TYPE_CONST_CHAR, 0, 1, TYPE_INT};
+
+/* void glShaderSourceARB (GLhandleARB handle , GLsizei size, const GLcharARB* *p_tab_prog, const GLint * tab_length) */
+/* --> void glShaderSourceARB (GLhandleARB handle , GLsizei size, const GLcharARB* all_progs, const GLint * tab_length) */
+static const int glShaderSourceARB_fake_signature[] = { TYPE_NONE, 0, 4, TYPE_INT, TYPE_INT, TYPE_ARRAY_CHAR, TYPE_ARRAY_INT};
+static const int glShaderSource_fake_signature[] = { TYPE_NONE, 0, 4, TYPE_INT, TYPE_INT, TYPE_ARRAY_CHAR, TYPE_ARRAY_INT};
+
+static const int glVertexPointer_fake_signature[] = { TYPE_NONE, 0, 6, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_ARRAY_CHAR };
+static const int glNormalPointer_fake_signature[] = { TYPE_NONE, 0, 5, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_ARRAY_CHAR };
+static const int glColorPointer_fake_signature[] = { TYPE_NONE, 0, 6, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_ARRAY_CHAR };
+static const int glSecondaryColorPointer_fake_signature[] = { TYPE_NONE, 0, 6, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_ARRAY_CHAR };
+static const int glIndexPointer_fake_signature[] = { TYPE_NONE, 0, 5, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_ARRAY_CHAR };
+static const int glTexCoordPointer_fake_signature[] = { TYPE_NONE, 0, 7, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_ARRAY_CHAR };
+static const int glEdgeFlagPointer_fake_signature[] = { TYPE_NONE, 0, 4, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_ARRAY_CHAR };
+static const int glVertexAttribPointerARB_fake_signature[] = { TYPE_NONE, 0, 8, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_ARRAY_CHAR };
+static const int glVertexAttribPointerNV_fake_signature[] = { TYPE_NONE, 0, 7, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_ARRAY_CHAR };
+static const int glWeightPointerARB_fake_signature[] = { TYPE_NONE, 0, 6, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_ARRAY_CHAR };
+static const int glMatrixIndexPointerARB_fake_signature[] = { TYPE_NONE, 0, 6, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_ARRAY_CHAR };
+static const int glFogCoordPointer_fake_signature[] = { TYPE_NONE, 0, 5, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_ARRAY_CHAR };
+static const int glInterleavedArrays_fake_signature[] = { TYPE_NONE, 0, 5, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_ARRAY_CHAR };
+static const int glElementPointerATI_fake_signature[] = { TYPE_NONE, 0, 3, TYPE_INT, TYPE_INT, TYPE_ARRAY_CHAR };
+static const int glVariantPointerEXT_fake_signature[] = { TYPE_NONE, 0, 6, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_ARRAY_CHAR };
+static const int glTuxRacerDrawElements_fake_signature[] = { TYPE_NONE, 0, 4, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_ARRAY_CHAR };
+static const int glVertexAndNormalPointer_fake_signature[] = { TYPE_NONE, 0, 7, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_ARRAY_CHAR };
+static const int glTexCoordPointer01_fake_signature[] = { TYPE_NONE, 0, 5, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_ARRAY_CHAR };
+static const int glTexCoordPointer012_fake_signature[] = { TYPE_NONE, 0, 5, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_ARRAY_CHAR };
+static const int glVertexNormalPointerInterlaced_fake_signature[] = {TYPE_NONE, 0, 8, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_ARRAY_CHAR };
+static const int glVertexNormalColorPointerInterlaced_fake_signature[] = {TYPE_NONE, 0, 11, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_ARRAY_CHAR };
+static const int glVertexColorTexCoord0PointerInterlaced_fake_signature[] = {TYPE_NONE, 0, 12, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_ARRAY_CHAR };
+static const int glVertexNormalTexCoord0PointerInterlaced_fake_signature[] = {TYPE_NONE, 0, 11, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_ARRAY_CHAR };
+static const int glVertexNormalTexCoord01PointerInterlaced_fake_signature[] = {TYPE_NONE, 0, 14, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_ARRAY_CHAR };
+static const int glVertexNormalTexCoord012PointerInterlaced_fake_signature[] = {TYPE_NONE, 0, 17, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_ARRAY_CHAR };
+static const int glVertexNormalColorTexCoord0PointerInterlaced_fake_signature[] = {TYPE_NONE, 0, 14, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_ARRAY_CHAR };
+static const int glVertexNormalColorTexCoord01PointerInterlaced_fake_signature[] = {TYPE_NONE, 0, 17, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_ARRAY_CHAR };
+static const int glVertexNormalColorTexCoord012PointerInterlaced_fake_signature[] = {TYPE_NONE, 0, 20, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_ARRAY_CHAR };
+
+static const int glGenTextures_fake_signature[] = { TYPE_NONE, 0, 1, TYPE_INT};
+static const int glGenBuffersARB_fake_signature[] = { TYPE_NONE, 0, 1, TYPE_INT};
+static const int glGenLists_fake_signature[] = { TYPE_NONE, 0, 1, TYPE_INT};
+
+static const int _glDrawElements_buffer_signature[] = { TYPE_NONE, 0, 4, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT};
+static const int _glDrawRangeElements_buffer_signature[] = { TYPE_NONE, 0, 6, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT};
+static const int _glMultiDrawElements_buffer_signature[] = { TYPE_NONE, 0, 5, TYPE_INT, TYPE_ARRAY_INT, TYPE_INT, TYPE_ARRAY_INT, TYPE_INT };
+
+static const int _glVertexPointer_buffer_signature[] = { TYPE_NONE, 0, 4, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT};
+static const int _glNormalPointer_buffer_signature[] = { TYPE_NONE, 0, 3, TYPE_INT, TYPE_INT, TYPE_INT};
+static const int _glColorPointer_buffer_signature[] = { TYPE_NONE, 0, 4, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT};
+static const int _glSecondaryColorPointer_buffer_signature[] = { TYPE_NONE, 0, 4, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT};
+static const int _glIndexPointer_buffer_signature[] = { TYPE_NONE, 0, 3, TYPE_INT, TYPE_INT, TYPE_INT};
+static const int _glTexCoordPointer_buffer_signature[] = { TYPE_NONE, 0, 4, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT};
+static const int _glEdgeFlagPointer_buffer_signature[] = { TYPE_NONE, 0, 2, TYPE_INT, TYPE_INT};
+static const int _glVertexAttribPointerARB_buffer_signature[] = { TYPE_NONE, 0, 6, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT};
+static const int _glWeightPointerARB_buffer_signature[] = { TYPE_NONE, 0, 4, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT};
+static const int _glMatrixIndexPointerARB_buffer_signature[] = { TYPE_NONE, 0, 4, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT};
+static const int _glFogCoordPointer_buffer_signature[] = { TYPE_NONE, 0, 3, TYPE_INT, TYPE_INT, TYPE_INT};
+static const int _glVariantPointerEXT_buffer_signature[] = { TYPE_NONE, 0, 4, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT};
+
+static const int _glReadPixels_pbo_signature[] = { TYPE_INT, 0, 7, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT};
+static const int _glDrawPixels_pbo_signature[] = { TYPE_NONE, 0, 5, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT};
+static const int _glMapBufferARB_fake_signature[] = { TYPE_INT, 1, 3, TYPE_INT, TYPE_INT, TYPE_OUT_ARRAY_CHAR };
+
+static const int _glSelectBuffer_fake_signature[] = { TYPE_NONE, 0, 1, TYPE_INT };
+static const int _glGetSelectBuffer_fake_signature[] = { TYPE_NONE, 1, 1, TYPE_ARRAY_CHAR };
+static const int _glFeedbackBuffer_fake_signature[] = { TYPE_NONE, 0, 2, TYPE_INT, TYPE_INT };
+static const int _glGetFeedbackBuffer_fake_signature[] = { TYPE_NONE, 1, 1, TYPE_ARRAY_CHAR };
+
+static const int _glGetError_fake_signature[] = { TYPE_NONE, 0, 0 };
+
+#define timesynchro_func -1
+#define memorize_array_func -2
+#define reuse_array_func -3
+
+#include "gl_func.h"
+
+static GLint __glTexParameter_size(FILE* err_file, GLenum pname)
+{
+ switch (pname) {
+ case GL_TEXTURE_MAG_FILTER:
+ case GL_TEXTURE_MIN_FILTER:
+ case GL_TEXTURE_WRAP_S:
+ case GL_TEXTURE_WRAP_T:
+ case GL_TEXTURE_PRIORITY:
+ case GL_TEXTURE_WRAP_R:
+ case GL_TEXTURE_COMPARE_FAIL_VALUE_ARB:
+/* case GL_SHADOW_AMBIENT_SGIX:*/
+ case GL_TEXTURE_MIN_LOD:
+ case GL_TEXTURE_MAX_LOD:
+ case GL_TEXTURE_BASE_LEVEL:
+ case GL_TEXTURE_MAX_LEVEL:
+ case GL_TEXTURE_CLIPMAP_FRAME_SGIX:
+ case GL_TEXTURE_LOD_BIAS_S_SGIX:
+ case GL_TEXTURE_LOD_BIAS_T_SGIX:
+ case GL_TEXTURE_LOD_BIAS_R_SGIX:
+ case GL_GENERATE_MIPMAP:
+/* case GL_GENERATE_MIPMAP_SGIS:*/
+ case GL_TEXTURE_COMPARE_SGIX:
+ case GL_TEXTURE_COMPARE_OPERATOR_SGIX:
+ case GL_TEXTURE_MAX_CLAMP_S_SGIX:
+ case GL_TEXTURE_MAX_CLAMP_T_SGIX:
+ case GL_TEXTURE_MAX_CLAMP_R_SGIX:
+ case GL_TEXTURE_MAX_ANISOTROPY_EXT:
+ case GL_TEXTURE_LOD_BIAS:
+/* case GL_TEXTURE_LOD_BIAS_EXT:*/
+ case GL_DEPTH_TEXTURE_MODE:
+/* case GL_DEPTH_TEXTURE_MODE_ARB:*/
+ case GL_TEXTURE_COMPARE_MODE:
+/* case GL_TEXTURE_COMPARE_MODE_ARB:*/
+ case GL_TEXTURE_COMPARE_FUNC:
+/* case GL_TEXTURE_COMPARE_FUNC_ARB:*/
+ case GL_TEXTURE_UNSIGNED_REMAP_MODE_NV:
+ return 1;
+ case GL_TEXTURE_CLIPMAP_CENTER_SGIX:
+ case GL_TEXTURE_CLIPMAP_OFFSET_SGIX:
+ return 2;
+ case GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX:
+ return 3;
+ case GL_TEXTURE_BORDER_COLOR:
+ case GL_POST_TEXTURE_FILTER_BIAS_SGIX:
+ case GL_POST_TEXTURE_FILTER_SCALE_SGIX:
+ return 4;
+ default:
+ fprintf(err_file, "unhandled pname = %d\n", pname);
+ return 0;
+ }
+}
+
+static int __glLight_size(FILE* err_file, GLenum pname)
+{
+ switch(pname)
+ {
+ case GL_AMBIENT:
+ case GL_DIFFUSE:
+ case GL_SPECULAR:
+ case GL_POSITION:
+ return 4;
+ break;
+
+ case GL_SPOT_DIRECTION:
+ return 3;
+ break;
+
+ case GL_SPOT_EXPONENT:
+ case GL_SPOT_CUTOFF:
+ case GL_CONSTANT_ATTENUATION:
+ case GL_LINEAR_ATTENUATION:
+ case GL_QUADRATIC_ATTENUATION:
+ return 1;
+ break;
+
+ default:
+ fprintf(err_file, "unhandled pname = %d\n", pname);
+ return 0;
+ }
+}
+
+static int __glMaterial_size(FILE* err_file, GLenum pname)
+{
+ switch(pname)
+ {
+ case GL_AMBIENT:
+ case GL_DIFFUSE:
+ case GL_SPECULAR:
+ case GL_EMISSION:
+ case GL_AMBIENT_AND_DIFFUSE:
+ return 4;
+ break;
+
+ case GL_SHININESS:
+ return 1;
+ break;
+
+ case GL_COLOR_INDEXES:
+ return 3;
+ break;
+
+ default:
+ fprintf(err_file, "unhandled pname = %d\n", pname);
+ return 0;
+ }
+}
+
+
+static int compute_arg_length(FILE* err_file, int func_number, int arg_i, long* args)
+{
+ Signature* signature = (Signature*)tab_opengl_calls[func_number];
+ int* args_type = signature->args_type;
+
+ switch (func_number)
+ {
+ case glProgramNamedParameter4fNV_func:
+ case glProgramNamedParameter4dNV_func:
+ case glProgramNamedParameter4fvNV_func:
+ case glProgramNamedParameter4dvNV_func:
+ case glGetProgramNamedParameterfvNV_func:
+ case glGetProgramNamedParameterdvNV_func:
+ if (arg_i == 2)
+ return 1 * args[arg_i-1] * tab_args_type_length[args_type[arg_i]];
+ break;
+
+ case glProgramStringARB_func:
+ case glLoadProgramNV_func:
+ case glGenProgramsNV_func:
+ case glDeleteProgramsNV_func:
+ case glGenProgramsARB_func:
+ case glDeleteProgramsARB_func:
+ case glRequestResidentProgramsNV_func:
+ case glDrawBuffers_func:
+ case glDrawBuffersARB_func:
+ case glDrawBuffersATI_func:
+ case glDeleteBuffers_func:
+ case glDeleteBuffersARB_func:
+ case glDeleteTextures_func:
+ case glDeleteTexturesEXT_func:
+ case glGenFramebuffersEXT_func:
+ case glDeleteFramebuffersEXT_func:
+ case glGenRenderbuffersEXT_func:
+ case glDeleteRenderbuffersEXT_func:
+ case glGenQueries_func:
+ case glGenQueriesARB_func:
+ case glDeleteQueries_func:
+ case glDeleteQueriesARB_func:
+ case glGenOcclusionQueriesNV_func:
+ case glDeleteOcclusionQueriesNV_func:
+ case glGenFencesNV_func:
+ case glDeleteFencesNV_func:
+ case glUniform1fv_func:
+ case glUniform1iv_func:
+ case glUniform1fvARB_func:
+ case glUniform1ivARB_func:
+ case glUniform1uivEXT_func:
+ case glVertexAttribs1dvNV_func:
+ case glVertexAttribs1fvNV_func:
+ case glVertexAttribs1svNV_func:
+ case glVertexAttribs1hvNV_func:
+ case glWeightbvARB_func:
+ case glWeightsvARB_func:
+ case glWeightivARB_func:
+ case glWeightfvARB_func:
+ case glWeightdvARB_func:
+ case glWeightubvARB_func:
+ case glWeightusvARB_func:
+ case glWeightuivARB_func:
+ case glPixelMapfv_func:
+ case glPixelMapuiv_func:
+ case glPixelMapusv_func:
+ case glProgramBufferParametersfvNV_func:
+ case glProgramBufferParametersIivNV_func:
+ case glProgramBufferParametersIuivNV_func:
+ case glTransformFeedbackAttribsNV_func:
+ case glTransformFeedbackVaryingsNV_func:
+ if (arg_i == signature->nb_args - 1)
+ return 1 * args[arg_i-1] * tab_args_type_length[args_type[arg_i]];
+ break;
+
+ case glUniform2fv_func:
+ case glUniform2iv_func:
+ case glUniform2fvARB_func:
+ case glUniform2ivARB_func:
+ case glUniform2uivEXT_func:
+ case glVertexAttribs2dvNV_func:
+ case glVertexAttribs2fvNV_func:
+ case glVertexAttribs2svNV_func:
+ case glVertexAttribs2hvNV_func:
+ case glDetailTexFuncSGIS_func:
+ case glSharpenTexFuncSGIS_func:
+ if (arg_i == signature->nb_args - 1)
+ return 2 * args[arg_i-1] * tab_args_type_length[args_type[arg_i]];
+ break;
+
+ case glUniform3fv_func:
+ case glUniform3iv_func:
+ case glUniform3fvARB_func:
+ case glUniform3ivARB_func:
+ case glUniform3uivEXT_func:
+ case glVertexAttribs3dvNV_func:
+ case glVertexAttribs3fvNV_func:
+ case glVertexAttribs3svNV_func:
+ case glVertexAttribs3hvNV_func:
+ if (arg_i == signature->nb_args - 1)
+ return 3 * args[arg_i-1] * tab_args_type_length[args_type[arg_i]];
+ break;
+
+ case glUniform4fv_func:
+ case glUniform4iv_func:
+ case glUniform4fvARB_func:
+ case glUniform4ivARB_func:
+ case glUniform4uivEXT_func:
+ case glVertexAttribs4dvNV_func:
+ case glVertexAttribs4fvNV_func:
+ case glVertexAttribs4svNV_func:
+ case glVertexAttribs4hvNV_func:
+ case glVertexAttribs4ubvNV_func:
+ case glProgramParameters4fvNV_func:
+ case glProgramParameters4dvNV_func:
+ case glProgramLocalParameters4fvEXT_func:
+ case glProgramEnvParameters4fvEXT_func:
+ case glProgramLocalParametersI4ivNV_func:
+ case glProgramLocalParametersI4uivNV_func:
+ case glProgramEnvParametersI4ivNV_func:
+ case glProgramEnvParametersI4uivNV_func:
+ if (arg_i == signature->nb_args - 1)
+ return 4 * args[arg_i-1] * tab_args_type_length[args_type[arg_i]];
+ break;
+
+ case glPrioritizeTextures_func:
+ case glPrioritizeTexturesEXT_func:
+ case glAreProgramsResidentNV_func:
+ case glAreTexturesResident_func:
+ case glAreTexturesResidentEXT_func:
+ if (arg_i == 1 || arg_i == 2)
+ return args[0] * tab_args_type_length[args_type[arg_i]];
+ break;
+
+ case glLightfv_func:
+ case glLightiv_func:
+ case glGetLightfv_func:
+ case glGetLightiv_func:
+ case glFragmentLightfvSGIX_func:
+ case glFragmentLightivSGIX_func:
+ case glGetFragmentLightfvSGIX_func:
+ case glGetFragmentLightivSGIX_func:
+ if (arg_i == signature->nb_args - 1)
+ return __glLight_size(err_file, args[arg_i-1]) * tab_args_type_length[args_type[arg_i]];
+ break;
+
+ case glLightModelfv_func:
+ case glLightModeliv_func:
+ if (arg_i == signature->nb_args - 1)
+ return ((args[arg_i-1] == GL_LIGHT_MODEL_AMBIENT) ? 4 : 1) * tab_args_type_length[args_type[arg_i]];
+ break;
+
+ case glFragmentLightModelfvSGIX_func:
+ case glFragmentLightModelivSGIX_func:
+ if (arg_i == signature->nb_args - 1)
+ return ((args[arg_i-1] == GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX) ? 4 : 1) * tab_args_type_length[args_type[arg_i]];
+ break;
+
+ case glMaterialfv_func:
+ case glMaterialiv_func:
+ case glGetMaterialfv_func:
+ case glGetMaterialiv_func:
+ case glFragmentMaterialfvSGIX_func:
+ case glFragmentMaterialivSGIX_func:
+ case glGetFragmentMaterialfvSGIX_func:
+ case glGetFragmentMaterialivSGIX_func:
+ if (arg_i == signature->nb_args - 1)
+ return __glMaterial_size(err_file, args[arg_i-1]) * tab_args_type_length[args_type[arg_i]];
+ break;
+
+ case glTexParameterfv_func:
+ case glTexParameteriv_func:
+ case glGetTexParameterfv_func:
+ case glGetTexParameteriv_func:
+ case glTexParameterIivEXT_func:
+ case glTexParameterIuivEXT_func:
+ case glGetTexParameterIivEXT_func:
+ case glGetTexParameterIuivEXT_func:
+ if (arg_i == signature->nb_args - 1)
+ return __glTexParameter_size(err_file, args[arg_i-1]) * tab_args_type_length[args_type[arg_i]];
+ break;
+
+ case glFogiv_func:
+ case glFogfv_func:
+ if (arg_i == signature->nb_args - 1)
+ return ((args[arg_i-1] == GL_FOG_COLOR) ? 4 : 1) * tab_args_type_length[args_type[arg_i]];
+ break;
+
+ case glTexGendv_func:
+ case glTexGenfv_func:
+ case glTexGeniv_func:
+ case glGetTexGendv_func:
+ case glGetTexGenfv_func:
+ case glGetTexGeniv_func:
+ if (arg_i == signature->nb_args - 1)
+ return ((args[arg_i-1] == GL_TEXTURE_GEN_MODE) ? 1 : 4) * tab_args_type_length[args_type[arg_i]];
+ break;
+
+ case glTexEnvfv_func:
+ case glTexEnviv_func:
+ case glGetTexEnvfv_func:
+ case glGetTexEnviv_func:
+ if (arg_i == signature->nb_args - 1)
+ return ((args[arg_i-1] == GL_TEXTURE_ENV_MODE) ? 1 : 4) * tab_args_type_length[args_type[arg_i]];
+ break;
+
+ case glConvolutionParameterfv_func:
+ case glConvolutionParameteriv_func:
+ case glGetConvolutionParameterfv_func:
+ case glGetConvolutionParameteriv_func:
+ case glConvolutionParameterfvEXT_func:
+ case glConvolutionParameterivEXT_func:
+ case glGetConvolutionParameterfvEXT_func:
+ case glGetConvolutionParameterivEXT_func:
+ if (arg_i == signature->nb_args - 1)
+ return ((args[arg_i-1] == GL_CONVOLUTION_BORDER_COLOR ||
+ args[arg_i-1] == GL_CONVOLUTION_FILTER_SCALE ||
+ args[arg_i-1] == GL_CONVOLUTION_FILTER_BIAS) ? 4 : 1) * tab_args_type_length[args_type[arg_i]];
+ break;
+
+ case glGetVertexAttribfvARB_func:
+ case glGetVertexAttribfvNV_func:
+ case glGetVertexAttribfv_func:
+ case glGetVertexAttribdvARB_func:
+ case glGetVertexAttribdvNV_func:
+ case glGetVertexAttribdv_func:
+ case glGetVertexAttribivARB_func:
+ case glGetVertexAttribivNV_func:
+ case glGetVertexAttribiv_func:
+ case glGetVertexAttribIivEXT_func:
+ case glGetVertexAttribIuivEXT_func:
+ if (arg_i == signature->nb_args - 1)
+ return ((args[arg_i-1] == GL_CURRENT_VERTEX_ATTRIB_ARB) ? 4 : 1) * tab_args_type_length[args_type[arg_i]];
+ break;
+
+
+ case glPointParameterfv_func:
+ case glPointParameterfvEXT_func:
+ case glPointParameterfvARB_func:
+ case glPointParameterfvSGIS_func:
+ case glPointParameteriv_func:
+ case glPointParameterivEXT_func:
+ if (arg_i == signature->nb_args - 1)
+ return ((args[arg_i-1] == GL_POINT_DISTANCE_ATTENUATION) ? 3 : 1) * tab_args_type_length[args_type[arg_i]];
+ break;
+
+ case glUniformMatrix2fv_func:
+ case glUniformMatrix2fvARB_func:
+ if (arg_i == signature->nb_args - 1)
+ return 2 * 2 * args[1] * tab_args_type_length[args_type[arg_i]];
+ break;
+
+ case glUniformMatrix3fv_func:
+ case glUniformMatrix3fvARB_func:
+ if (arg_i == signature->nb_args - 1)
+ return 3 * 3 * args[1] * tab_args_type_length[args_type[arg_i]];
+ break;
+
+ case glUniformMatrix4fv_func:
+ case glUniformMatrix4fvARB_func:
+ if (arg_i == signature->nb_args - 1)
+ return 4 * 4 * args[1] * tab_args_type_length[args_type[arg_i]];
+ break;
+
+ case glUniformMatrix2x3fv_func:
+ case glUniformMatrix3x2fv_func:
+ if (arg_i == signature->nb_args - 1)
+ return 2 * 3 * args[1] * tab_args_type_length[args_type[arg_i]];
+ break;
+
+ case glUniformMatrix2x4fv_func:
+ case glUniformMatrix4x2fv_func:
+ if (arg_i == signature->nb_args - 1)
+ return 2 * 4 * args[1] * tab_args_type_length[args_type[arg_i]];
+ break;
+
+ case glUniformMatrix3x4fv_func:
+ case glUniformMatrix4x3fv_func:
+ if (arg_i == signature->nb_args - 1)
+ return 3 * 4 * args[1] * tab_args_type_length[args_type[arg_i]];
+ break;
+
+ case glSpriteParameterivSGIX_func:
+ case glSpriteParameterfvSGIX_func:
+ if (arg_i == signature->nb_args - 1)
+ return ((args[arg_i-1] == GL_SPRITE_MODE_SGIX) ? 1 : 3) * tab_args_type_length[args_type[arg_i]];
+ break;
+
+ default:
+ break;
+ }
+
+ fprintf(err_file, "invalid combination for compute_arg_length : func_number=%d, arg_i=%d\n", func_number, arg_i);
+ return 0;
+}
+
+#define IS_NULL_POINTER_OK_FOR_FUNC(func_number) \
+ (func_number == glBitmap_func || \
+ func_number == _send_cursor_func || \
+ func_number == glTexImage1D_func || \
+ func_number == glTexImage2D_func || \
+ func_number == glTexImage3D_func || \
+ func_number == glBufferDataARB_func || \
+ func_number == glNewObjectBufferATI_func)
+
+#ifdef __amd64__
+#define _init_func _init64_func
+#else
+#ifdef __i386__
+#define _init_func _init32_func
+#else
+#error Unsupported ABI
+#endif
+#endif