diff options
Diffstat (limited to 'opengl_func.h')
-rw-r--r-- | opengl_func.h | 915 |
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 |